Numpy:如何用一个矩阵乘以一个三维张量--建议

14
我有一个形状为的矩阵P和一个形状为的三维张量T。我希望将PT中每个NxR矩阵相乘,得到一个形状为的三维张量。
使用P.dot(T).transpose(1,0,2)可以得到所需结果。是否有更好的方法(即去除transpose)解决这个问题?由于这是一种常见的操作,因此我认为其他人已经找到了不同的方法,例如使用tensordot(我尝试了但未能获得所需结果)。非常感谢您的意见/建议!
2个回答

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

1
哈!昨天我盯着 scipy.tensordot(P, T, axes=[1,1]) 的结果看了好几个小时,因为维度被交换而感到绝望。没想到还有 swapaxes 这个函数,谢谢! - osdf
不客气。我还检查了交换轴是否给出了正确的数字答案,确实如此。 - Steve Tjoa

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接