Python 优雅的Numpy张量积

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,

我需要在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,:,:])

如何优雅地做到这一点?

我试过:

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)@AlexanderGuyer
cam=C
。我修好了。很抱歉我想得到A的dim2和B的dim1上的点积。如果我忽略第一个轴,那就是矩阵积,不是吗?