繁体   English   中英

将矩阵的每个向量乘以 3d 张量的每个矩阵

[英]Multiply each vector of matrix by each matrix of 3d tensor

我有两个张量m1.shape = [a, b, b]m2.shape = [a, b] 我想要做的是使用循环以这种方式完成:

ret = np.zeros_like(m2)
for idx, (m1_sub, m2_sub) in enumerate(zip(m1, m2)):
    ret[idx] += m2_sub @ m1_sub

换句话说,将向量m2[i]乘以m1[i]并将结果存储在大小为[a, b]的矩阵中。 有没有什么简单的方法可以通过使用 numpy 内置函数并避免循环来实现这一点?

给定m1m2具有各自的形状(a,b,b)(a,b)你正在这样做

a = 10
b = 5

m1 = np.random.randn(a,b,b)
m2 = np.random.randn(a,b)

ret = np.zeros_like(m2)

for i in range(a):
    ret[i] += (m2[i,:] * m1[i,:,:].T).sum(axis=1)

这与

(m2[...,None] * m1).sum(1)

这可以用einsum等价表示

np.einsum("ij,ijk->ik", m2, m1)

m1中的第一个轴( i下标)与m2中的第一个轴相乘。

第二个轴正在根据sum(axis=1)减少,这是因为我们省略了 einsum 方程的 output 中的j下标。

m2中没有第三个轴,因此它针对m1中的第三个轴( k下标)进行广播。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM