numpy
numpy.cross
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ś. |
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.