我有两个 numy 矩阵:
所以,我试图以这样的方式获得一个形状为 (N,M,d) 的矩阵,以便在 B 和 A 的每个元素(即 M 元素)之间进行元素乘积。我使用 numpy 的 einsum 如下:
product = np.einsum('ijk,ik->ijk', A, B)
我得到了很好的形状,但我怀疑操作是错误的,而且我没有按预期制作元素明智的产品。
我对 einsum 的使用是否正确?
答案 0 :(得分:3)
我试图得到一个形状为 (N,M,d) 的矩阵,以便在 B 和 A 的每个元素(即 M 元素)之间进行元素乘积。
您尝试执行的操作是在轴 = 1 of A
(M 尺寸)上的广播元素明智乘积 -
C1 = A * B[:,None,:]
您可以随时进行快速测试,以检查您所期望的结果是否确实是您已实施的内容。
A = np.random.randint(0,5,(2,3,1)) # N,M,d
B = np.random.randint(0,5,(1,1)) # N,d
C2 = np.einsum('ijk,ik->ijk', A, B)
print(C2)
[[[4]
[0]
[8]]
[[4]
[4]
[4]]]
再次检查两个操作是否相等=
np.allclose(C1, C2)
##True
有关 np.einsum
工作原理的更多详细信息,请参见 here。