Buscar..


Sintaxis

  • numpy.cross(a, b) # producto cruzado de a y b (o vectores en a y b )
  • numpy.cross(a, b, axisa=-1) # producto cruzado de vectores en a con b , los vectores st en a están dispuestos a lo largo del eje axisa
  • numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # productos cruzados de vectores en a y b , vectores de salida dispuestos a lo largo del eje especificado por axisc
  • numpy.cross(a, b, axis=None) # productos cruzados de vectores en a y b , vectores en a , b , y en salida distribuidos a lo largo del eje

Parámetros

Columna Columna
a, b En el uso más simple, a y b son dos vectores de 2 o 3 elementos. También pueden ser matrices de vectores (es decir, matrices bidimensionales). Si a es una matriz y 'b' es un vector, cross(a,b) devuelve una matriz cuyos elementos son los productos cruzados de cada vector en a con el vector b . La b es una matriz y a es un solo vector, cross(a,b) devuelve una matriz cuyos elementos son los productos cruzados de a con cada vector en b . a y b pueden ser ambos arrays si tienen la misma forma. En este caso, la cross(a,b) devuelve la cross(a[0],b[0]), cross(a[1], b[1]), ...
axisa / b Si a es una matriz, puede tener vectores distribuidos en el eje de variación más rápida, el eje de variación más lenta o algo intermedio. axisa le dice a la cross() cómo los vectores están dispuestos en a . Por defecto, toma el valor del eje que varía más lentamente. axisb funciona igual con la entrada b . Si la salida de cross() va a ser una matriz, los vectores de salida pueden tener diferentes ejes de matriz; axisc le dice a la cross cómo colocar los vectores en su matriz de salida. Por defecto, axisc indica el eje de variación más lenta.
eje Un parámetro de conveniencia que establece axisa , axisb y axisc en el mismo valor si se desea. Si el axis y cualquiera de los otros parámetros están presentes en la llamada, el valor del axis anulará los otros valores.

Producto cruzado de dos vectores

Numpy proporciona una función cross para la computación de productos cruzados vectoriales. El producto cruzado de los vectores [1, 0, 0] y [0, 1, 0] es [0, 0, 1] . Numpy nos dice:

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

como se esperaba.

Mientras que los productos cruzados se definen normalmente solo para vectores tridimensionales. Sin embargo, cualquiera de los argumentos de la función Numpy puede ser dos vectores de elementos. Si el vector c se da como [c1, c2] , Numpy asigna cero a la tercera dimensión: [c1, c2, 0] . Asi que,

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

A diferencia del dot que existe tanto como una función Numpy como un método de ndarray , cross solo existe como una función independiente:

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

Productos cruzados múltiples con una llamada

Cualquiera de las entradas puede ser una matriz de vectores de 3 (o 2) elementos.

>>> 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]])

El resultado en este caso es array ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])

b también puede ser una matriz de vectores de 3 (o 2) elementos, pero debe tener la misma forma que a . De lo contrario, el cálculo falla con un error de "desajuste de forma". Para que podamos tener

>>> 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]])

y ahora el resultado es array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])

Más flexibilidad con múltiples productos cruzados

En nuestros dos últimos ejemplos, numpy asumió que a[0,:] era el primer vector, a[1,:] el segundo, y a[2,:] el tercero. Numpy.cross tiene un argumento opcional axisa que nos permite especificar qué eje define los vectores. Asi que,

>>> 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]])

El resultado de axisa=1 y el resultado predeterminado son ambos (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . De forma predeterminada, axisa siempre indica el último eje (el que varía más lentamente) de la matriz. El resultado de axisa=0 es (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .

Un parámetro opcional similar, axisb , realiza la misma función para la entrada b , si también es una matriz bidimensional.

Los parámetros axisa y axisb le dicen a los números cómo distribuir los datos de entrada. Un tercer parámetro, axisc le dice a Númpy cómo distribuir la salida si a o b es multidimensional. Usando las mismas entradas a y b que arriba, obtenemos

>>> 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]])

Entonces, axisc=1 y el axisc predeterminado dan el mismo resultado, es decir, los elementos de cada vector son contiguos en el índice de movimiento más rápido de la matriz de salida. Axisc es por defecto el último eje de la matriz. axisc=0 distribuye los elementos de cada vector en la dimensión variable más lenta de la matriz.

Si desea que axisa , axisb y axisc tengan el mismo valor, no necesita configurar los tres parámetros. Puede configurar un cuarto parámetro, axis , al valor único necesario y los otros tres parámetros se establecerán automáticamente. axis reemplaza a axisa, axisb o axisc si alguno de ellos está presente en la llamada de función.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow