Numpy:矩阵与三维张量相乘 - 建议
我有一个矩阵 P
,它的形状是 MxN
,还有一个三维张量 T
,它的形状是 KxNxR
。我想把 P
和 T
中每一个 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)