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

时间:2010-12-20 15:16:29

标签: python matrix numpy scipy linear-algebra

我有一个形状为P的矩阵MxN和一个形状为T的三维张量KxNxR。我想将PNxR中的每个T矩阵相乘,从而产生KxMxR 3d张量。

P.dot(T).transpose(1,0,2)给出了期望的结果。是否有更好的解决方案(即摆脱transpose)这个问题?这必须是一个非常常见的操作,所以我认为,其他人已经找到了不同的方法,例如使用tensordot(我尝试但未能获得所需的结果)。意见/观点将受到高度赞赏!

2 个答案:

答案 0 :(得分:6)

scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)

答案 1 :(得分:2)

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

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)