En numpy que a menudo utilizan matrices 1d para representar vectores, y lo tratamos, ya sea como vector fila o un vector columna, dependiendo del contexto, por ejemplo:
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
puede almacenar vectores como matrices 2D, esto es más útil cuando se tiene una colección de vectores desea para tratar de una manera similar. Por ejemplo, si quiero cruzar 4 vectores en a con 4 vectores en b. Por defecto numpy asume que los vectores están a lo largo de las últimas dimensiones pero puede usar los argumentos axisa y axisb para especificar explícitamente que los vectores están a lo largo de la primera dimensión.
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]])
Interesante, gracias. ¿Es posible cambiar el eje predeterminado a 0? – Ingo
@thomas: No es que yo sepa. Pero, ¿es realmente una tarea tan ardua seguir las convenciones de la biblioteca al definir sus vectores, o definir explícitamente su orden para la llamada? – talonmies
No, no lo está, pero estoy escribiendo el código para algunos estudiantes y por vexperience los confunde si, por ejemplo, los vectores son todos vectores de fila cuando se utilizan para los vectores de columna. – Ingo