Numpy:矩阵与三维张量相乘 - 建议

14 投票
2 回答
5523 浏览
提问于 2025-04-16 08:47

我有一个矩阵 P,它的形状是 MxN,还有一个三维张量 T,它的形状是 KxNxR。我想把 PT 中每一个 NxR 的矩阵相乘,最后得到一个形状为 KxMxR 的三维张量。

P.dot(T).transpose(1,0,2) 可以得到想要的结果。有没有更“好”的方法(也就是不使用 transpose)来解决这个问题呢?我觉得这个操作应该很常见,所以我想其他人可能也找到过不同的解决办法,比如使用 tensordot(我试过,但没有得到想要的结果)。如果有意见或看法,我会非常感激!

2 个回答

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)
6

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不知道问题出在哪里。

通常,解决这类问题的第一步是仔细检查代码,看看有没有拼写错误或者用错了某些功能。很多时候,问题可能就出在这些小细节上。

另外,查看相关的文档也是一个好主意。文档就像是使用说明书,它能告诉你如何正确使用这个库,或者有哪些功能是可用的。

如果还是找不到问题所在,可以考虑在网上搜索一下,看看其他人是否遇到过类似的问题。社区里有很多人愿意分享他们的经验和解决方案,这可能会帮助你找到答案。

总之,遇到问题时不要着急,慢慢来,仔细检查,通常都能找到解决办法。

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

撰写回答