Numpy:将矩阵与 3d 张量相乘 -- 建议

发布于 2024-10-08 11:15:50 字数 372 浏览 2 评论 0原文

我有一个形状为 MxN 的矩阵 P 和一个形状为 KxNxR 的 3d 张量 T。我想将 PT 中的每个 NxR 矩阵相乘,得到 KxMxR 3d 张量。

P.dot(T).transpose(1,0,2) 给出所需的结果。对于这个问题是否有一个更好的解决方案(即摆脱转置)?这一定是一个非常常见的操作,所以我认为其他人已经找到了不同的方法,例如使用tensordot(我尝试过但未能获得所需的结果)。意见/意见将受到高度赞赏!

I have a matrix P with shape MxN and a 3d tensor T with shape KxNxR. I want to multiply P with every NxR matrix in T, resulting in a KxMxR 3d tensor.

P.dot(T).transpose(1,0,2) gives the desired result. Is there a nicer solution (i.e. getting rid of transpose) to this problem? This must be quite a common operation, so I assume, others have found different approaches, e.g. using tensordot (which I tried but failed to get the desired result). Opinions/Views would be highly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

违心° 2024-10-15 11:15:50
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
幸福%小乖 2024-10-15 11:15:50

您还可以使用爱因斯坦求和符号:

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)

You could also use Einstein summation notation:

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)

which should give you the same results as:

P.dot(T).transpose(1,0,2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文