如何解决将张量切片乘以矩阵行
我试图找到一种方法来有效地计算张量 (shape: (n,n,m)
) 的每个深度二维切片与矩阵 (shape: (n,m)
)。我正在尝试做的事情看起来像这样没有矢量化:
import numpy as np
np.random.seed(42)
np.random.seed(1)
a = np.arange(16).reshape(4,4)
b = np.random.randn(4,4,4)
c = np.zeros((4,4))
for i in range(4):
c[i] = b[...,i] @ a[i]
产生的结果:
<<< print(c)
>>> [[ 0.53623421 -0.10257152 -1.34855819 -1.72774519]
[-18.13932187 1.82230599 -11.99348739 15.0787884 ]
[ 38.5704751 -0.38514407 4.19673794 9.01941574]
[-68.11165212 -5.52586601 64.69279036 11.3196871 ]]
我最接近的是:
<<< print(np.einsum("ij,ijk->ki",a,b))
>>> [[ 0.53623421,-2.66288958,-16.91264496,-12.98103047],[ -3.95244251,1.82230599,-20.5351456,34.69343339],[ 8.07033597,-0.90215803,4.19673794,12.57858867],[ -8.18116212,-3.54815874,46.60443317,11.3196871 ]]
至少左上和右下元素匹配的地方。
解决方法
你们很亲近。
以下应该产生与您的 for 循环相同的结果
print(np.einsum('ikj,jk->ji',b,a))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。