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.