Suche…


Syntax

  • numpy.cross(a, b) # Kreuzprodukt von a und b (oder Vektoren in a und b )
  • numpy.cross(a, b, axisa=-1) #cross Produkt von Vektoren in a mit b , st Vektoren in a sind entlang der Achsenachse angeordnet
  • numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # Kreuzprodukte der Vektoren in a und b , Ausgabevektoren entlang der durch axisc angegebenen Achse
  • numpy.cross(a, b, axis=None) # Kreuzprodukte von Vektoren in a und b , Vektoren in a , b und in Ausgabe entlang der Achsenachse

Parameter

Säule Säule
a, b Bei der einfachsten Verwendung sind a und b zwei 2- oder 3-Element-Vektoren. Sie können auch Arrays von Vektoren sein (dh zweidimensionale Matrizen). Wenn a ein Array und 'b' ein Vektor ist, gibt cross(a,b) ein Array zurück, dessen Elemente die Kreuzprodukte jedes Vektors in a mit dem Vektor b . b ist ein Array und a ist ein einzelner Vektor. cross(a,b) gibt ein Array zurück, dessen Elemente die Kreuzprodukte von a mit jedem Vektor in b . a und b können beide Arrays sein, wenn sie die gleiche Form haben. In diesem Fall gibt cross(a,b) cross(a[0],b[0]), cross(a[1], b[1]), ...
Axisa / b Wenn a ein Array ist, kann es Vektoren haben, die auf der am schnellsten variierenden Achse, der langsamsten variierenden Achse oder etwas dazwischen angeordnet sind. axisa teilt cross() wie die Vektoren in a . Standardmäßig nimmt es den Wert der am langsamsten variierenden Achse. axisb funktioniert genauso mit Eingabe b . Wenn die Ausgabe von cross() ein Array sein wird, können die Ausgabevektoren unterschiedliche Array-Achsen haben; axisc teilt cross wie die Vektoren in ihrem Ausgabearray angeordnet werden. Standardmäßig gibt axisc die am axisc veränderliche Achse an.
Achse Ein komfortabler Parameter, der axisa , axisb und axisc auf den gleichen Wert axisb , falls gewünscht. Wenn die axis und einer der anderen Parameter in dem Aufruf vorhanden sind, überschreibt der Wert der axis die anderen Werte.

Kreuzprodukt zweier Vektoren

Numpy stellt eine cross Kreuzprodukte für die Berechnung. Das Kreuzprodukt der Vektoren [1, 0, 0] und [0, 1, 0] ist [0, 0, 1] . Numpy sagt uns:

>>> a = np.array([1, 0, 0])
>>> b = np.array([0, 1, 0])
>>> np.cross(a, b)
array([0, 0, 1])

wie erwartet.

Während Kreuzprodukte normalerweise nur für dreidimensionale Vektoren definiert werden. Jedes der Argumente für die Numpy-Funktion kann jedoch zwei Elementvektoren sein. Wenn der Vektor c als [c1, c2] , weist Numpy der dritten Dimension Null zu: [c1, c2, 0] . So,

>>> c = np.array([0, 2])
>>> np.cross(a, c)
array([0, 0, 2])

Im Gegensatz zu dot das sowohl als Numpy-Funktion als auch als Methode von ndarray existiert, existiert cross nur als eigenständige Funktion:

>>> a.cross(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'cross'

Mehrere Kreuzprodukte mit einem Anruf

Bei beiden Eingaben kann es sich um ein Array von 3 (oder 2) Elementvektoren handeln.

>>> 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]])

Das Ergebnis ist in diesem Fall array ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])

b kann auch ein Array von 3- (oder 2-) Elementvektoren sein, muss aber die gleiche Form wie a . Andernfalls schlägt die Berechnung mit einem "Shape Mismatch" -Fehler fehl. So können wir haben

>>> 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]])

und jetzt ist das Ergebnis array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])

Mehr Flexibilität mit mehreren Cross-Produkten

In den letzten beiden Beispielen nahm numpy an, dass a[0,:] der erste Vektor war, a[1,:] der zweite und a[2,:] der dritte. Numpy.cross hat ein optionales Argument axisa, mit dem wir festlegen können, welche Achse die Vektoren definiert. So,

>>> 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]])

Das Ergebnis axisa=1 und das Standardergebnis sind beide (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . Standardmäßig gibt axisa immer die letzte (am axisa veränderliche) Achse des Arrays an. Das Ergebnis von axisa=0 ist (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .

Ein ähnlicher optionaler Parameter, axisb , führt dieselbe Funktion für die Eingabe b , wenn es sich ebenfalls um ein zweidimensionales Array handelt.

Die Parameter axisa und axisb geben an, wie die Eingabedaten verteilt werden sollen. Ein dritter Parameter, axisc, gibt an, wie die Ausgabe verteilt werden soll, wenn a oder b mehrdimensional sind. Mit den gleichen Eingaben a und b wie oben erhalten wir

>>> 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]])

axisc=1 und der Standard- axisc ergeben also dasselbe Ergebnis, axisc die Elemente jedes Vektors sind im schnellsten Index des Ausgabearrays zusammenhängend. axisc ist standardmäßig die letzte Achse des Arrays. axisc=0 verteilt die Elemente jedes Vektors über die am langsamsten variierende Dimension des Arrays.

Wenn Sie möchten, dass axisa , axisb und axisc den gleichen Wert haben, müssen Sie nicht alle drei Parameter einstellen. Sie können einen vierten Parameter, axis , auf den erforderlichen Einzelwert setzen, und die anderen drei Parameter werden automatisch eingestellt. axes überschreibt axisa, axisb oder axisc, wenn einer von ihnen im Funktionsaufruf vorhanden ist.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow