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

numpy einsum: Elementwise product between 3D matrix and 2D matrix

我有两个 numy 矩阵:

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

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

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

我得到了好的形状,但我怀疑操作有误,我没有按预期做元素明智的产品。

我对 einsum 的使用正确吗?

I am trying to get a Matrix with shape (N,M,d) in such manner that I do element wise product between B and each element of A (which are M elements).

您尝试执行的操作是在 A(M 尺寸)-

轴 = 1 上的广播元素乘积
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 工作原理的更多详细信息,请参见