Python:将 (4,1,2) 数组与 (4,1) 相乘得到 (4,1,2) 数组

Python: Multiplying a (4,1,2)-array with a (4,1) to get a (4,1,2) array

正如标题所说,我基本上希望第二个矩阵(我们称之为 B)是第一个矩阵(我们称之为 A)的行的乘法列表。

我该怎么做? 示例:

A = np.array([[[ 1.,  3.]],
     [[ 1.,  4.]],
     [[ 1.,  5.]],
     [[ 1.,  8.]]])

B = np.array([[0],
     [1],
     [3],
     [8]], dtype=np.int64)

我希望结果是

C = np.array([[[0., 0.,]],
     [[1.,  4.]],
     [[3.,  15.]],
     [[8.,  64.]]])

要在这种情况下进行广播,您需要 B 一个新轴:

>>> A * B[:,None,:]
array([[[  0.,   0.]],
       [[  1.,   4.]],
       [[  3.,  15.]],
       [[  8.,  64.]]])

您可能会发现 np.einsum() 对 n 维数组很有用。在这种情况下,您可以

np.einsum('i...,i...->i...',A,B)

以获得您想要的答案。

np.einsum('ijk,il->ijk',A,B)

也有效,而且更明确。

有关 np.einsum() 的更多详细信息,请参见 here