Szukaj…


Składnia

  • numpy.cross(a, b) # iloczynu a, b (lub wektory w A i B)
  • numpy.cross(a, b, axisa=-1) #cross produkt wektorów w z b, st wektorów w rozmieszczone są wzdłuż osi axisa
  • numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # produkty krzyżowe wektorów w a i b , wektory wyjściowe ułożone wzdłuż osi określonej przez axisc
  • numpy.cross(a, b, axis=None) # produkty krzyżowe wektorów w a i b , wektorów w a , b oraz w wynikach ułożonych wzdłuż osi osi

Parametry

Kolumna Kolumna
a, b W najprostszym zastosowań i a b są dwa wektory 2- lub 3-element. Mogą to być również tablice wektorów (tj. Macierze dwuwymiarowe). Jeśli jest tablicą i „b” jest wektorem, a cross(a,b) Zwraca tablicę której elementy są poprzeczne produkty każdego wektora w wektorem a b . b jest tablicą, a a jest pojedynczym wektorem, cross(a,b) zwraca tablicę, której elementy są iloczynami krzyżowymi a dla każdego wektora b . a i b mogą być zarówno tablicami, jeśli mają ten sam kształt. W tym przypadku cross(a,b) zwraca cross(a[0],b[0]), cross(a[1], b[1]), ...
axisa / b Jeśli a jest tablicą, może mieć wektory ułożone na najszybciej zmieniającej się osi, najwolniejszej zmiennej osi lub coś pomiędzy. axisa mówi cross() jak wektory są ułożone w a . Domyślnie przyjmuje wartość najwolniej zmieniającej się osi. axisb działa tak samo z wejściem b . Jeśli wyjściem cross() będzie tablica, wektory wyjściowe mogą być ułożone w różnych osiach tablicy; axisc mówi cross jak układać wektory w swojej tablicy wyjściowej. Domyślnie axisc wskazuje najbardziej wolno zmieniającą się oś.
Parametr wygody, który ustawia axisa , axisb i axisc na tę samą wartość w razie potrzeby. Jeśli axis i którykolwiek z pozostałych parametrów są obecne w wywołaniu, wartość axis zastąpi inne wartości.

Produkt krzyżowy dwóch wektorów

Numpy zapewnia funkcję cross do obliczania wektorowych produktów krzyżowych. Produktem krzyżowym wektorów [1, 0, 0] i [0, 1, 0] jest [0, 0, 1] . Numpy mówi nam:

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

zgodnie z oczekiwaniami.

Podczas gdy produkty krzyżowe są zwykle definiowane tylko dla wektorów trójwymiarowych. Jednak jeden z argumentów funkcji Numpy może być wektorem dwuelementowym. Jeśli wektor c jest podany jako [c1, c2] , Numpy przypisuje zero do trzeciego wymiaru: [c1, c2, 0] . Więc,

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

W przeciwieństwie do dot która istnieje zarówno jako funkcja Numpy, jak i metoda ndarray , cross istnieje tylko jako samodzielna funkcja:

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

Wiele produktów krzyżowych za pomocą jednego połączenia

Każde wejście może być tablicą wektorów 3- (lub 2-) elementowych.

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

W tym przypadku wynikiem jest tablica ([np. Krzyż (a [0], b), np. Krzyż (a [1], b), np. Krzyż (a [2], b)])

b może być również tablicą wektorów 3- (lub 2-) elementowych, ale musi mieć ten sam kształt co a . W przeciwnym razie obliczenia zakończą się niepowodzeniem z błędem „niedopasowania kształtu”. Więc możemy mieć

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

a teraz wynikiem jest array([np.cross(a[0],b[0]), np.cross(a[1],b[1]), np.cross(a[2],b[2])])

Większa elastyczność dzięki wielu produktom krzyżowym

W naszych dwóch ostatnich przykładach numpy zakładał, że a[0,:] był pierwszym wektorem, a[1,:] drugim, a a[2,:] trzecim. Numpy.cross ma opcjonalny argument axisa, który pozwala nam określić, która oś definiuje wektory. Więc,

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

Wynik axisa=1 i wynik domyślny to: (np.cross([1,1,1],b), np.cross([0,1,0],b), np.cross([1,0,-1],b)) . Domyślnie axisa zawsze wskazuje ostatnią (najbardziej powoli zmieniającą się) oś tablicy. Wynik axisa=0 to (np.cross([1,0,1],b), np.cross([1,1,0],b), np.cross([1,0,-1],b)) .

Podobny opcjonalny parametr axisb wykonuje tę samą funkcję dla wejścia b , jeśli jest to również tablica dwuwymiarowa.

Parametry axisa i axisb mówią numpy, jak dystrybuować dane wejściowe. Trzeci parametr, axisc, mówi numpy, jak rozdzielić dane wyjściowe, jeśli a lub b jest wielowymiarowe. Przy użyciu tych samych wejść i a b jak wyżej, mamy

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

Tak więc axisc=1 i domyślna axisc dają ten sam wynik, to znaczy elementy każdego wektora sąsiadują w najszybszym ruchomym indeksie tablicy wyjściowej. axisc jest domyślnie ostatnią osią tablicy. axisc=0 rozkłada elementy każdego wektora w najwolniejszym zmiennym wymiarze tablicy.

Jeśli chcesz, aby axisa , axisb i axisc miały wszystkie tę samą wartość, nie musisz ustawiać wszystkich trzech parametrów. Możesz ustawić czwarty parametr, axis , na potrzebną pojedynczą wartość, a pozostałe trzy parametry zostaną ustawione automatycznie. oś zastępuje axisa, axisb lub axisc, jeśli którykolwiek z nich występuje w wywołaniu funkcji.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow