如何一次性通过不同的值对 3d NumPy 数组的不同列进行多个处理?

How to multiple different columns of 3d NumPy array by different values in one go?

我有一个这样的示例数组:

x = np.array([[[1, 1, 1], [1, 1, 1], [1, 1, 1]], [[2, 2, 2], [2, 2, 2], [2, 2, 2]], [[3, 3, 3], [3, 3, 3], [3, 3, 3]]])

我可以毫无问题地将所有值乘以 2:

print(x * 2)

>>> [[[2 2 2]
  [2 2 2]
  [2 2 2]]

 [[4 4 4]
  [4 4 4]
  [4 4 4]]

 [[6 6 6]
  [6 6 6]
  [6 6 6]]]

太棒了!

我需要做的是将第一个“列”中的所有数组乘以 2,在第二个“列”中乘以 4,在第三个“列”中乘以 3,这样:

print(result)

>>> [[[2 2 2]
  [4 4 4]
  [3 3 3]]

 [[4 4 4]
  [8 8 8]
  [6 6 6]]

 [[6 6 6]
  [12 12 12]
  [9 9 9]]]

有没有像我乘以 2 那样的 numpy 语法?

将因子做成一个 3 X 1 数组,然后乘以 x:

x * np.array([2,4,3]).reshape(-1, 1)

#[[[ 2  2  2]
#  [ 4  4  4]
#  [ 3  3  3]]

# [[ 4  4  4]
#  [ 8  8  8]
#  [ 6  6  6]]

# [[ 6  6  6]
#  [12 12 12]
#  [ 9  9  9]]]

您可以阅读有关 numpy broadcasting here 的更多信息。