Python/Numpy - 两数组匹配行的叉乘

6 投票
1 回答
2003 浏览
提问于 2025-04-17 20:16

如何在两个数组之间对每一行进行叉乘,最好的方法是什么?举个例子:

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代码中完成这个操作。我现在使用的是简单的循环,但这是我代码中最慢的部分(我的实际数组有几万行)。

1 个回答

6

我可能很快就得把这个回答删掉,因为我意识到我犯了错误,但难道明显的做法不管用吗?

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

撰写回答