Numpy:将矩阵与 3d 张量相乘——建议
Posted
技术标签:
【中文标题】Numpy:将矩阵与 3d 张量相乘——建议【英文标题】:Numpy: Multiplying a matrix with a 3d tensor -- Suggestion 【发布时间】:2011-05-28 07:38:29 【问题描述】:我有一个形状为MxN
的矩阵P
和一个形状为KxNxR
的3d 张量T
。我想将P
与T
中的每个NxR
矩阵相乘,得到KxMxR
3d 张量。
P.dot(T).transpose(1,0,2)
给出了想要的结果。有没有更好的 解决方案(即摆脱transpose
)来解决这个问题?这一定是一个很常见的操作,所以我假设,其他人已经找到了不同的方法,例如使用tensordot
(我尝试过但未能获得预期的结果)。意见/意见将不胜感激!
【问题讨论】:
【参考方案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)
【讨论】:
【参考方案2】:scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
【讨论】:
哈!昨天我盯着scipy.tensordot(P, T, axes=[1,1])
的结果看了几个小时,对交换的维度感到绝望。不知道swapaxes
,谢谢!
不客气。我还检查了交换轴是否给出了正确的数字答案,并且确实如此。以上是关于Numpy:将矩阵与 3d 张量相乘——建议的主要内容,如果未能解决你的问题,请参考以下文章
Pytorch - 张量的元素 0 不需要 grad 并且没有 grad_fn - 将矩阵相加和相乘作为 NN 步骤参数