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