Python Numpy:将矩阵与3d张量相乘——建议

Python Numpy:将矩阵与3d张量相乘——建议,python,matrix,numpy,scipy,linear-algebra,Python,Matrix,Numpy,Scipy,Linear Algebra,我有一个矩阵p和一个三维张量T和形状KxNxR。我想用T中的每个NxR矩阵乘以P,得到KxMxR3d张量 p.dot(T).转置(1,0,2)给出所需的结果。是否有更好的解决方案(即摆脱转置)来解决此问题?这一定是一个非常常见的操作,因此我假设其他人已经找到了不同的方法,例如使用tensordot(我尝试过,但没有得到预期的结果)。非常感谢您的意见 您也可以使用爱因斯坦求和符号: scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1) P = numpy

我有一个矩阵
p
和一个三维张量
T
和形状
KxNxR
。我想用
T
中的每个
NxR
矩阵乘以
P
,得到
KxMxR
3d张量


p.dot(T).转置(1,0,2)
给出所需的结果。是否有更好的解决方案(即摆脱
转置
)来解决此问题?这一定是一个非常常见的操作,因此我假设其他人已经找到了不同的方法,例如使用
tensordot
(我尝试过,但没有得到预期的结果)。非常感谢您的意见

您也可以使用爱因斯坦求和符号:

scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
P = numpy.random.randint(1,10,(5,3))
P.shape
T = numpy.random.randint(1,10,(2,3,4))
T.shape

numpy.einsum('ij,kjl->kil',P,T)
这将为您提供与以下相同的结果:

P.dot(T).transpose(1,0,2)

哈昨天我盯着scipy.tensordot(P,T,axes=[1,1])的结果看了几个小时,对交换的维度感到绝望。我不知道Swapax的事,谢谢!不客气。我还检查了交换轴是否给出了正确的数字答案,确实如此。