2013-03-25 12 views
5

Jaki jest najlepszy sposób na zrobienie iloczynu z każdego odpowiedniego rzędu między dwiema tablicami? Na przykład:Python/Numpy - produkt krzyżowy z pasującymi wierszami w dwóch tablicach

a = 20x3 array 
b = 20x3 array 
c = 20x3 array = some_cross_function(a, b) where: 
c[0] = np.cross(a[0], b[0]) 
c[1] = np.cross(a[1], b[1]) 
c[2] = np.cross(a[2], b[2]) 
...etc... 

wiem, można to zrobić za pomocą prostego pętli Pythona lub korzystania apply_along_axis NumPy, ale zastanawiam się, czy jest jakiś dobry sposób to zrobić całkowicie wewnątrz bazowego kodu C numpy. Obecnie używam prostej pętli, ale jest to zdecydowanie najwolniejsza część mojego kodu (moje rzeczywiste tablice mają dziesiątki tysięcy wierszy).

Odpowiedz

5

Prawdopodobnie będę musiał usunąć tę odpowiedź za kilka minut, gdy zdam sobie sprawę z mojego błędu, ale czy to nie działa?

>>> a = np.random.random((20,3)) 
>>> b = np.random.random((20,3)) 
>>> c = np.cross(a,b) 
>>> c[0], np.cross(a[0], b[0]) 
(array([-0.02469147, 0.52341148, -0.65514102]), array([-0.02469147, 0.52341148, -0.65514102])) 
>>> c[1], np.cross(a[1], b[1]) 
(array([-0.0733347 , -0.32691093, 0.40987079]), array([-0.0733347 , -0.32691093, 0.40987079])) 
>>> all((c[i] == np.cross(a[i], b[i])).all() for i in range(len(c))) 
True 
+0

Masz rację. Myślałem, że próbowałem tego i miałem problemy, ale po prostu spróbowałem go ponownie i zadziałało. Po raz pierwszy musiałem zrobić coś złego. Dzięki. –

Powiązane problemy