numpy
numpy.cross
Поиск…
Синтаксис
-
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, если какая-либо из них присутствует в вызове функции.