numpy
numpy.cross
Ricerca…
Sintassi
-
numpy.cross(a, b)prodotto # croce di A e B (o vettori in A e B) -
numpy.cross(a, b, axisa=-1)#cross prodotto di vettori in a con b , i vettori in a sono disposti lungo l'asse axisa -
numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1)prodotti # trasversali di vettori in un e b, vettori di uscita disposte lungo l'asse specificato da axisc -
numpy.cross(a, b, axis=None)prodotti # trasversali di vettori in A e B, i vettori in a, b, e in uscita disposti lungo l'asse asse
Parametri
| Colonna | Colonna |
|---|---|
| a, b | Nell'uso più semplice, a e b sono due vettori a 2 o 3 elementi. Possono anche essere array di vettori (cioè matrici bidimensionali). Se a è un array e 'b' è un vettore, cross(a,b) restituisce un array i cui elementi sono i prodotti incrociati di ciascun vettore in a con il vettore b . La b è una matrice e a è un singolo vettore, la cross(a,b) restituisce una matrice i cui elementi sono i prodotti incrociati di a con ciascun vettore in b . a e b possono essere entrambi array se hanno la stessa forma. In questo caso, cross(a,b) restituisce cross(a[0],b[0]), cross(a[1], b[1]), ... |
| Axisa / b | Se a è un array, può avere vettori disposti attraverso l'asse che varia più rapidamente, l'asse di variazione più lento o qualcosa in mezzo. axisa dice a cross() come sono disposti i vettori in a . Di default, prende il valore dell'asse che varia più lentamente. axisb funziona allo stesso modo con l'input b . Se l'output di cross() sta per essere un array, i vettori di output possono essere disposti su diversi assi dell'array; axisc dice cross come disporre i vettori nella sua matrice di uscita. Per impostazione predefinita, axisc indica l'asse che varia più lentamente. |
| asse | Un parametro di convenienza che imposta axisa , axisb e axisc tutti sullo stesso valore, se desiderato. Se l' axis e uno qualsiasi degli altri parametri sono presenti nella chiamata, il valore axis annullerà gli altri valori. |
Prodotto incrociato di due vettori
Numpy fornisce una funzione cross per il calcolo di prodotti incrociati vettoriali. Il prodotto incrociato di vettori [1, 0, 0] e [0, 1, 0] è [0, 0, 1] . Numpy ci dice:
>>> a = np.array([1, 0, 0])
>>> b = np.array([0, 1, 0])
>>> np.cross(a, b)
array([0, 0, 1])
come previsto.
Mentre i prodotti incrociati sono normalmente definiti solo per vettori tridimensionali. Tuttavia, uno degli argomenti della funzione Numpy può essere costituito da due vettori di elementi. Se il vettore c è dato come [c1, c2] , Numpy assegna zero alla terza dimensione: [c1, c2, 0] . Così,
>>> c = np.array([0, 2])
>>> np.cross(a, c)
array([0, 0, 2])
A differenza del dot che esiste sia come funzione Numpy sia come metodo ndarray , la cross esiste solo come funzione autonoma:
>>> a.cross(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'cross'
Più prodotti incrociati con una sola chiamata
Entrambi gli input possono essere una matrice di vettori di elementi 3- (o 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]])
Il risultato in questo caso è array ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])
b può anche essere una matrice di vettori di elementi 3- (o 2), ma deve avere la stessa forma di a . In caso contrario, il calcolo non riesce con un errore di "mancata corrispondenza della forma". Quindi possiamo avere
>>> 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]])
e ora il risultato è array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])
Maggiore flessibilità con più prodotti incrociati
Nei nostri ultimi due esempi, numpy presupponeva che a[0,:] fosse il primo vettore, a[1,:] il secondo e a[2,:] il terzo. Numpy.cross ha un argomento opzionale axisa che ci permette di specificare quale asse definisce i vettori. Così,
>>> 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]])
Il risultato axisa=1 e il risultato predefinito sono entrambi (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . Per impostazione predefinita, axisa indica sempre l'ultimo (più lentamente variabile) asse della matrice. Il risultato axisa=0 è (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .
Un parametro opzionale simile, axisb , esegue la stessa funzione per l'ingresso b , se è anche un array bidimensionale.
I parametri axisa e axisb indicano numpy come distribuire i dati di input. Un terzo parametro, axisc dice a numpy come distribuire l'output se a o b è multidimensionale. Usando gli stessi ingressi a e b come sopra, otteniamo
>>> 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]])
Quindi axisc=1 e l' axisc default axisc entrambi lo stesso risultato, cioè gli elementi di ciascun vettore sono contigui nell'indice di spostamento più veloce dell'array di output. axisc è di default l'ultimo asse dell'array. axisc=0 distribuisce gli elementi di ciascun vettore attraverso la dimensione variabile più lenta dell'array.
Se vuoi che axisa , axisb e axisc abbiano tutti lo stesso valore, non è necessario impostare tutti e tre i parametri. È possibile impostare un quarto parametro, axis , sul valore singolo desiderato e gli altri tre parametri verranno impostati automaticamente. l'asse sovrascrive axisa, axisb o axisc se qualcuno di essi è presente nella chiamata di funzione.