我有两个数组,一个包含一个向量列表(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)
但我似乎无法对交叉产品做同样的事情。
答案 0 :(得分:3)
只是广播问题:
>>> D = np.cross(A[:, None, :], B)
>>> np.all(D==C)
True