numpy
numpy.cross
Sök…
Syntax
-
numpy.cross(a, b)
# korsprodukt av a och b (eller vektorer i a och b ) -
numpy.cross(a, b, axisa=-1)
# cross produkt av vektorer i a med b , st vektorer i a läggs ut längs axisa axisa -
numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1)
# korsprodukter av vektorer i a och b , utgångsvektorer som anges längs axeln specificerad av axisc -
numpy.cross(a, b, axis=None)
# korsprodukter av vektorer i a och b , vektorer i a , b och i utgången utmed längs axelaxeln
parametrar
Kolumn | Kolumn |
---|---|
a, b | I enklaste användning är a och b två 2- eller 3-elementvektorer. De kan också vara matriser av vektorer (dvs. tvådimensionella matriser). Om a är en matris och 'b' är en vektor, returnerar cross(a,b) en matris vars element är korsprodukterna för varje vektor i a med vektorn b . b är en matris och a är en enda vektor, cross(a,b) returnerar en matris vars element är korsprodukterna av a med varje vektor i b . a och b kan båda vara matriser om de har samma form. I detta fall returnerar cross(a,b) cross(a[0],b[0]), cross(a[1], b[1]), ... |
axisa / b | Om a är en matris, kan det ha vektorer utlagda över den snabbast varierande axeln, den långsammaste varierande axeln eller något däremellan. axisa berättar för cross() hur vektorerna läggs ut i a . Som standard tar det värdet på den långsamt varierande axeln. axisb fungerar på samma sätt med ingång b . Om utgången från cross() kommer att bli en matris kan utgångsvektorerna läggas ut olika matrisaxlar; axisc berättar för cross hur man ska lägga ut vektorerna i dess utgångsgrupp. Som standard indikerar axisc den mest långsamt varierande axeln. |
axel | En bekvämlighetsparameter som sätter axisa , axisb och axisc alla till samma värde om så önskas. Om axis och någon av de andra parametrarna finns i samtalet kommer axis värde att åsidosätta de andra värdena. |
Korsprodukt av två vektorer
Numpy ger en cross
funktion för att beräkna kors produkter vektor. Korsprodukten av vektorer [1, 0, 0]
och [0, 1, 0]
är [0, 0, 1]
. Numpy berättar för oss:
>>> a = np.array([1, 0, 0])
>>> b = np.array([0, 1, 0])
>>> np.cross(a, b)
array([0, 0, 1])
som förväntat.
Medan tvärprodukter normalt definieras endast för tredimensionella vektorer. Emellertid kan något av argumenten till Numpy-funktionen vara två elementvektorer. Om vektor c
ges som [c1, c2]
, tilldelar Numpy noll till den tredje dimensionen: [c1, c2, 0]
. Så,
>>> c = np.array([0, 2])
>>> np.cross(a, c)
array([0, 0, 2])
Till skillnad från dot
som existerar både som en Numpy-funktion och en metod för ndarray
, finns cross
endast som en fristående funktion:
>>> a.cross(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'cross'
Flera korsprodukter med ett samtal
Endera ingången kan vara en grupp med 3- (eller 2-) elementvektorer.
>>> 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]])
Resultatet i detta fall är matris ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])
b
kan också vara en grupp med 3- (eller 2-) elementvektorer, men den måste ha samma form som a
. Annars misslyckas beräkningen med ett "formmatchningsfel". Så vi kan ha det
>>> 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]])
och nu är resultatet array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])
Mer flexibilitet med flera tvärprodukter
I våra två senaste exempel antog numpy att a[0,:]
var den första vektorn, a[1,:]
den andra och a[2,:]
den tredje. Numpy.cross har ett valfritt argument axisa som gör att vi kan specificera vilken axel som definierar vektorerna. Så,
>>> 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]])
axisa=1
resultat och standardresultatet är båda (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b))
. Som standard anger axisa
alltid den sista (mest långsamt varierande) axeln i matrisen. axisa=0
resultatet är (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b))
.
En liknande valfri parameter, axisb
, utför samma funktion för b
ingången, om det också är en tvådimensionell matris.
Parametrarna axisa och axeln säger numpy hur man distribuerar ingångsdata. En tredje parameter, axisc berättar numpy hur man distribuerar utgången om a
eller b
är flerdimensionell. Med samma ingångar a
och b
som ovan får vi
>>> 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]])
Så axisc=1
och standard axisc
ger båda samma resultat, det vill säga elementen i varje vektor är sammanhängande i det snabbast rörande indexet i utmatningsgruppen. axisc är som standard den sista axeln i matrisen. axisc=0
fördelar elementen i varje vektor över den långsammast varierande dimensionen i matrisen.
Om du vill att axisa
, axisb
och axisc
ska ha samma värde behöver du inte ställa in alla tre parametrar. Du kan ställa in en fjärde parameter, axis
, till önskat enskilt värde och de andra tre parametrarna kommer automatiskt att ställas in. axel åsidosätter axisa, axelb eller axisk om någon av dem är närvarande i funktionssamtalet.