In NumPy usiamo spesso gli array 1D per rappresentare i vettori, e lo trattiamo come sia un vettore riga o di un vettore colonna a seconda del contesto, per esempio:
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
è possibile memorizzare vettori come array 2D, questo è molto utile quando si dispone di una collezione di vettori che si desidera trattare in modo simile Per esempio se voglio incrociare 4 vettori in a con 4 vettori in b. Per impostazione predefinita numpy presuppone che i vettori siano lungo le ultime dimensioni, ma è possibile utilizzare gli argomenti axisa e axisb per specificare esplicitamente che i vettori si trovano lungo la prima dimensione.
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]])
fonte
2012-02-12 17:34:18
Interessante, grazie. È possibile modificare l'asse predefinito su 0? – Ingo
@thomas: Non che io sappia. Ma è davvero un compito così arduo seguire le convenzioni della biblioteca quando si definiscono i propri vettori o definire esplicitamente il loro ordine alla chiamata? – talonmies
No, non lo è, ma sto scrivendo il codice per alcuni studenti e per vexperience li confonde se per esempio i vettori sono tutti vettori di riga quando sono usati per i vettori di colonne. – Ingo