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

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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow