2013-03-25 95 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