使用Python在2个数组中包含的向量的元素智能交叉产品

时间:2018-04-20 00:08:30

标签: python numpy vector

我有两个数组,一个包含一个向量列表(A),另一个包含一个2D向量列表(B)。我希望以特定的方式对每个数组中的向量进行元素明智的交叉乘积。

A中的第一个向量应由B的第一个元素中包含的所有3个向量交叉生成(?)。

这是一个最小的例子:

import numpy as np

A = np.random.rand(2,3)

B = np.random.rand(2,3,3)

C = np.random.rand(2,3,3)

C[0,0] = np.cross(A[0],B[0,0])
C[0,1] = np.cross(A[0],B[0,1])
C[0,2] = np.cross(A[0],B[0,2])

C[1,0] = np.cross(A[1],B[1,0])
C[1,1] = np.cross(A[1],B[1,1])
C[1,2] = np.cross(A[1],B[1,2])

我希望避免使用for循环来提高效率。

我使用以下方法对点积进行了相同的操作:

C = np.einsum('aj,ijk->ij',A,B)

但我似乎无法对交叉产品做同样的事情。

1 个答案:

答案 0 :(得分:3)

只是广播问题:

>>> D = np.cross(A[:, None, :], B)
>>> np.all(D==C)
True