Поиск…


Синтаксис

  • numpy.cross(a, b) # перекрестное произведение a и b (или векторов в a и b )
  • numpy.cross(a, b, axisa=-1) #cross произведение векторов в с Ь, ул векторов в раскладывают вдоль оси axisa
  • numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # кросс-продукты векторов в a и b , выходные векторы, выложенные вдоль оси, указанной axisc
  • numpy.cross(a, b, axis=None) # перекрестные произведения векторов в a и b , векторы в a , b и в выводе, выложенные вдоль оси оси

параметры

колонка колонка
а, б В простейшем использовании a и b представляют собой два 2- или 3-элементных вектора. Они также могут быть массивами векторов (т. Е. Двумерных матриц). Если a - это массив, а «b» - вектор, cross(a,b) возвращает массив, элементы которого являются перекрестными произведениями каждого вектора в a с вектором b . b - массив, a - один вектор, cross(a,b) возвращает массив, элементы которого являются перекрестными произведениями a с каждым вектором в b . a и b могут быть массивами, если они имеют одинаковую форму. В этом случае cross(a,b) возвращает cross(a[0],b[0]), cross(a[1], b[1]), ...
axisa / б Если a - массив, он может иметь векторы, расположенные на самой быстро меняющейся оси, самой медленной изменяющейся оси или что-то среднее между ними. axisa говорит cross() как векторы выложены в a . По умолчанию он принимает значение самой медленно меняющейся оси. axisb работает одинаково с входом b . Если вывод cross() будет массивом, выходные векторы могут быть выложены разными осями массива; axisc говорит cross , как раскладывать векторы в его выходном массиве. По умолчанию axisc указывает наиболее медленно меняющуюся ось.
ось Удобный параметр, который по axisa устанавливает axisa , axisb и axisc значения в одно и то же значение. Если в вызове присутствует axis и любой другой параметр, значение axis будет переопределять другие значения.

Перекрестный продукт двух векторов

Numpy обеспечивает cross функцию для вычисления векторных кросс-продуктов. Перекрестное произведение векторов [1, 0, 0] и [0, 1, 0] - [0, 0, 1] . Numpy говорит нам:

>>> a = np.array([1, 0, 0])
>>> b = np.array([0, 1, 0])
>>> np.cross(a, b)
array([0, 0, 1])

как и ожидалось.

В то время как кросс-продукты обычно определяются только для трехмерных векторов. Тем не менее, любой из аргументов функции Numpy может быть двумя векторами элементов. Если вектор c задан как [c1, c2] , то Numpy присваивает ноль третьему размеру: [c1, c2, 0] . Так,

>>> c = np.array([0, 2])
>>> np.cross(a, c)
array([0, 0, 2])

В отличие от dot которая существует как функция Numpy, так и метод ndarray , cross существует только как отдельная функция:

>>> a.cross(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'cross'

Множественные перекрестные продукты с одним вызовом

Любой вход может быть массивом трехмерных (или 2-) векторов элементов.

>>> a=np.array([[1,0,0],[0,1,0],[0,0,1]])
>>> b=np.array([1,0,0])
>>> np.cross(a,b)
array([[ 0,  0,  0],
       [ 0,  0, -1],
       [ 0,  1,  0]])

Результатом в этом случае является массив ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])

b также может быть массивом трехмерных (или 2-) векторов элементов, но он должен иметь ту же форму, что и a . В противном случае вычисление не выполняется с ошибкой «несоответствие формы». Таким образом, мы можем

>>> b=np.array([[0,0,1],[1,0,0],[0,1,0]])
>>> np.cross(a,b)
array([[ 0, -1,  0],
       [ 0,  0, -1],
       [-1,  0,  0]])

и теперь результатом является array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])

Больше гибкости при использовании нескольких кросс-продуктов

В наших последних двух примерах numpy предположил, что a[0,:] был первым вектором, a[1,:] вторым и a[2,:] третьим. Numpy.cross имеет необязательную ось аргументов аргумента, которая позволяет нам указать, какая ось определяет векторы. Так,

>>> a=np.array([[1,1,1],[0,1,0],[1,0,-1]])
>>> b=np.array([0,0,1])
>>> np.cross(a,b)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,axisa=0)
array([[ 0, -1,  0],
       [ 1, -1,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,axisa=1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])

Результат axisa=1 результат по умолчанию - (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . По умолчанию axisa всегда указывает последнюю (наиболее медленно меняющуюся) ось массива. Результат axisa=0 (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .

Аналогичный необязательный параметр, axisb , выполняет ту же функцию для входа b , если он также является двумерным массивом.

Параметры axisa и axisb говорят о том, как распределять входные данные. Третий параметр, axisc говорит numpy, как распределять вывод, если a или b является многомерным. Используя те же самые входы a и b что и выше, мы получаем

>>> np.cross(a,b,1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])
>>> np.cross(a,b,1,axisc=0)
array([[ 1,  1,  0],
       [-1,  0, -1],
       [ 0,  0,  0]])
>>> np.cross(a,b,1,axisc=1)
array([[ 1, -1,  0],
       [ 1,  0,  0],
       [ 0, -1,  0]])

Итак, axisc=1 а axisc по умолчанию дают одинаковый результат, т. axisc Элементы каждого вектора смежны в индексе быстрого перемещения выходного массива. axisc по умолчанию является последней осью массива. axisc=0 распределяет элементы каждого вектора через самую медленную переменную размерность массива.

Если вы хотите, чтобы axisa , axisb и axisc были одинаковыми, вам не нужно устанавливать все три параметра. Вы можете установить четвертый параметр, axis , на необходимое одиночное значение, а остальные три параметра будут автоматически установлены. ось переопределяет ось, ось b или axisc, если какая-либо из них присутствует в вызове функции.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow