This question already has an answer here:
Scale rows of 3D-tensor

(1 个回答)


1年前关闭。




我有一个形状为 a 的 3D numpy 数组 [M, N, 3] 和一个形状为 b 的二维数组 [M, N] 。我想将 a 的第 3 个维度中的 3 个值中的每一个乘以 b 中的相应值,我目前正在这样做:

a[:,:,0] *= b
a[:,:,1] *= b
a[:,:,2] *= b

我想知道是否有一种单行方式来实现这一点。

谢谢!

最佳答案

a * b[:,:,np.newaxis] 会这样做:

In [37]: a
Out[37]:
array([[[1, 2, 3],
        [4, 5, 6]]])

In [38]: b
Out[38]: array([[4, 5]])

In [39]: a * b[:,:,np.newaxis]
Out[39]:
array([[[ 4,  8, 12],
        [20, 25, 30]]])

同样的事情还有其他的表达方式,比如
  • a * np.expand_dims(b, 2)
  • a * b[..., np.newaxis]
  • 关于python - Numpy乘以N维矩阵的一维,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58366973/

    10-12 17:03