numpy einsum:3D 矩阵和 2D 矩阵之间的元素乘积

时间:2021-04-10 01:24:15

标签: python numpy numpy-einsum

我有两个 numy 矩阵:

  1. 形状为 (N,M,d) 的 A
  2. 形状为 (N,d) 的 B

所以,我试图以这样的方式获得一个形状为 (N,M,d) 的矩阵,以便在 B 和 A 的每个元素(即 M 元素)之间进行元素乘积。我使用 numpy 的 einsum 如下:

product = np.einsum('ijk,ik->ijk', A, B) 

我得到了很好的形状,但我怀疑操作是错误的,而且我没有按预期制作元素明智的产品。

我对 einsum 的使用是否正确?

1 个答案:

答案 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