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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow