Zoeken…


Syntaxis

  • numpy.cross(a, b) # kruisproduct van a en b (of vectoren in a en b )
  • numpy.cross(a, b, axisa=-1) #kruisproduct van vectoren in a met b , st vectoren in a zijn aangelegd langs as axisa
  • numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # kruisproducten van vectoren in a en b , outputvectoren aangelegd langs as gespecificeerd door axisc
  • numpy.cross(a, b, axis=None) # kruisproducten van vectoren in a en b , vectoren in a , b en in uitvoer langs de as

parameters

Kolom Kolom
a, b In het eenvoudigste gebruik zijn a en b twee 2- of 3-elementenvectoren. Het kunnen ook reeksen van vectoren zijn (dwz tweedimensionale matrices). Als a een array is en 'b' een vector, retourneert cross(a,b) een array waarvan de elementen de crossproducten zijn van elke vector in a met de vector b . De b is een array en a is een enkele vector, cross(a,b) retourneert een array waarvan de elementen de crossproducten zijn van a met elke vector in b . a en b kunnen beide arrays zijn als ze dezelfde vorm hebben. In dit geval retourneert cross(a,b) cross(a[0],b[0]), cross(a[1], b[1]), ...
Axisa / b Als a een array is, kunnen vectoren zijn aangelegd over de snelst variërende as, de langzaamst variërende as of iets daartussenin. axisa vertelt cross() hoe de vectoren zijn axisa in a . Standaard wordt de waarde van de langzaamst variërende as gebruikt. axisb werkt hetzelfde met ingang b . Als de output van cross() een array wordt, kunnen de outputvectoren verschillende arrayassen worden ingedeeld; axisc vertelt cross hoe de vectoren in de uitvoerarray moeten worden axisc . axisc geeft standaard de langzaamst variërende as aan.
as Een axisa die axisa , axisb en axisc indien gewenst allemaal op dezelfde waarde zet. Als de axis en een van de andere parameters aanwezig zijn in de aanroep, overschrijft de waarde van de axis de andere waarden.

Kruisproduct van twee vectoren

Numpy geeft een cross functie voor het berekenen van vector kruis producten. Het kruisproduct van vectoren [1, 0, 0] en [0, 1, 0] is [0, 0, 1] . Numpy vertelt ons:

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

zoals verwacht.

Terwijl kruisproducten normaal alleen worden gedefinieerd voor driedimensionale vectoren. Beide argumenten voor de Numpy-functie kunnen echter twee elementvectoren zijn. Als vector c wordt gegeven als [c1, c2] , wijst Numpy nul toe aan de derde dimensie: [c1, c2, 0] . Zo,

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

In tegenstelling tot de dot die bestaat als zowel een Numpy-functie als een methode van ndarray , bestaat cross alleen als een zelfstandige functie:

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

Meerdere kruisproducten met één oproep

Beide invoer kan een reeks van 3- (of 2-) elementvectoren zijn.

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

Het resultaat in dit geval is array ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])

b kan ook een array van 3- (of 2-) elementvectoren zijn, maar deze moet dezelfde vorm hebben als a . Anders mislukt de berekening met een fout 'vorm komt niet overeen'. Dus we kunnen hebben

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

en nu is het resultaat array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])

Meer flexibiliteit met meerdere kruisproducten

In onze laatste twee voorbeelden ging numpy ervan uit dat a[0,:] de eerste vector was, a[1,:] de tweede en a[2,:] de derde. Numpy.cross heeft een optioneel argument axisa waarmee we kunnen specificeren welke as de vectoren definieert. Zo,

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

Het axisa=1 resultaat en het standaardresultaat zijn beide (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . axisa geeft standaard altijd de laatste (langzaamst variërende) as van de array aan. Het resultaat axisa=0 is (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .

Een vergelijkbare optionele parameter, axisb , voert dezelfde functie uit voor de invoer b , als het ook een tweedimensionale array is.

Parameters axisa en axisb vertellen numpy hoe de invoergegevens moeten worden verdeeld. Een derde parameter, axisc, vertelt numpy hoe de uitvoer moet worden verdeeld als a of b multidimensionaal is. Met dezelfde ingangen a en b als hierboven, krijgen we

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

Dus axisc=1 en de standaard axisc geven beide hetzelfde resultaat, dat wil zeggen dat de elementen van elke vector aaneengesloten zijn in de snelst bewegende index van de uitvoerarray. axisc is standaard de laatste as van de array. axisc=0 verdeelt de elementen van elke vector over de langzaamst variërende dimensie van de array.

Als u wilt dat axisa , axisb en axisc allemaal dezelfde waarde hebben, hoeft u niet alle drie de parameters in te stellen. U kunt een vierde parameter, axis , instellen op de benodigde enkele waarde en de andere drie parameters worden automatisch ingesteld. as vervangt axisa, axisb of axisc als een van deze aanwezig is in de functieaanroep.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow