2013-03-25 92 views
5

在兩個數組之間獲取每個對應行的叉積最好的方法是什麼?例如:Python/Numpy - 在兩個數組中匹配行的交叉積

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... 

我知道這可以用一個簡單的Python循環或使用numpy的的apply_along_axis做,但我不知道是否有完全在numpy的的底層C代碼做什麼好辦法。我目前使用一個簡單的循環,但這是迄今爲止我的代碼中最慢的部分(我的實際數組是長達數萬行)。

回答

5

我可能會在幾分鐘內刪除這個答案,當我意識到自己的錯誤時,卻不明顯的事情發揮作用?

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

你說得對。我以爲我試過這個,並有問題,但我只是嘗試了一遍,我自己,它的工作。我一定是第一次做錯了。謝謝。 – 2013-03-25 23:09:50