В NumPy мы часто используем 1d массивы для представления векторов, и мы рассматриваем его как либо вектор-строка или вектор-столбец, в зависимости от контекста, например:
In [13]: a = np.array([1, 2, 3])
In [15]: b = np.array([4, 5, 6])
In [16]: np.cross(a, b)
Out[16]: array([-3, 6, -3])
In [17]: np.dot(a, b)
Out[17]: 32
вы можете хранить векторы как 2d массивов, это наиболее полезно, когда у вас есть набор векторов вы хотите лечить подобным образом. Например, если я хочу пересечь 4 вектора в a с 4 векторами в b. По умолчанию numpy предполагает, что векторы находятся по последним измерениям, но вы можете использовать аргументы axisa и axisb, чтобы явно указать, что векторы расположены вдоль первого измерения.
In [26]: a = np.random.random((3, 4))
In [27]: b = np.random.random((3, 4))
In [28]: np.cross(a, b, axisa=0, axisb=0)
Out[28]:
array([[-0.34780508, 0.54583745, -0.25644455],
[ 0.03892861, 0.18446659, -0.36877085],
[ 0.36736545, 0.13549752, -0.32647531],
[-0.46253185, 0.56148668, -0.10056834]])
Интересно, спасибо. Можно ли изменить ось по умолчанию на 0? – Ingo
@thomas: Не то, что я знаю. Но действительно ли такая трудная задача либо следовать правилам библиотеки при определении ваших векторов, либо явно определять их порядок для вызова? – talonmies
Нет, это не так, но я пишу код для некоторых учеников, и по опыту он смущает их, если, например, векторы - это все векторы строк, когда они используются для векторов столбцов. – Ingo