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。我想将PT 中的每个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 张量相乘——建议的主要内容,如果未能解决你的问题,请参考以下文章

根据张量流中给定的序列长度数组对 3D 张量进行切片

Numpy 将矩阵附加到张量

矩阵与张量的区别

如何对两个 PyTorch 量化张量进行矩阵相乘?

使用张量流矩阵乘法测试 GPU

Pytorch - 张量的元素 0 不需要 grad 并且没有 grad_fn - 将矩阵相加和相乘作为 NN 步骤参数