我有一个形状为P
的矩阵MxN
和一个形状为T
的三维张量KxNxR
。我想将P
与NxR
中的每个T
矩阵相乘,从而产生KxMxR
3d张量。
P.dot(T).transpose(1,0,2)
给出了期望的结果。是否有更好的解决方案(即摆脱transpose
)这个问题?这必须是一个非常常见的操作,所以我认为,其他人已经找到了不同的方法,例如使用tensordot
(我尝试但未能获得所需的结果)。意见/观点将受到高度赞赏!
答案 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)