Python 优雅的Numpy张量积
我需要在numpy(或pytorch)中取两个张量的乘积: 我有Python 优雅的Numpy张量积,python,numpy,pytorch,numpy-einsum,Python,Numpy,Pytorch,Numpy Einsum,我需要在numpy(或pytorch)中取两个张量的乘积: 我有 A = np.arange(1024).reshape(8,1,128) B = np.arange(9216).reshape(8, 128, 9) 并希望获得C,在A(axis=2)的最后一个维度和B(axis=1)的中间维度上求和点积。其尺寸应为8x9。目前,我正在做: C = np.zeros([8, 9]) for i in range(8): C[i,:] = np.matmul(A[i,:,:], B[i,
A = np.arange(1024).reshape(8,1,128)
B = np.arange(9216).reshape(8, 128, 9)
并希望获得C
,在A
(axis=2
)的最后一个维度和B
(axis=1
)的中间维度上求和点积。其尺寸应为8x9
。目前,我正在做:
C = np.zeros([8, 9])
for i in range(8):
C[i,:] = np.matmul(A[i,:,:], B[i,:,:])
如何优雅地做到这一点?
我试过:
np.tensordot(weights, features, axes=(2,1)).
但它返回8x1x8x9
一种方法是使用
C=np.einsum('ijk,ikl->il',A,B)
或者你可以使用矩阵乘法
C=(A@B).挤压(轴=1)
#当量:C=np.matmul(A,B).挤压(轴=1)
您为当前所做工作提供的代码不计算C。什么是cam
?它与C
有什么关系?np.matmul(A,B)
应该产生(8,1,9)@AlexanderGuyercam=C
。我修好了。很抱歉我想得到A的dim2和B的dim1上的点积。如果我忽略第一个轴,那就是矩阵积,不是吗?