将Numpy 3D阵列乘以1D阵列

时间:2013-01-25 00:13:33

标签: python arrays numpy multidimensional-array numpy-broadcasting

我正在尝试将3D数组乘以1D数组,以便沿第3(深度:d)维度的每个2D数组计算如下:

1D_array[d]*2D_array

我最终得到一个看起来像是的数组:

[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]

这是将np.ones((3,2,2))与[1,2,3]正确相乘的结果。

我已经尝试了一段时间,无论我做什么,我都无法得到这个结果,只是主题的变化。我该如何正确地做到这一点?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

让我们假设 b=np.ones((3,2,2))a=np.array([1,2,3])。我真的很喜欢@Alok 的答案,它使用简单的 a[:, None, None] * b 肯定可以解决您的问题。我不喜欢这个公式的地方在于它是特定于维度的。我的意思是它只能与 3 维数组一起使用,这在我的问题中不是真的,其中 b 可以是 1D 或 3D 数组,其长度与 axis 0 完全相同。因此,我找到了一种方法来适应我的问题:

broad_a = np.broadcast_to(a, b.T.shape).T
result = broad_a * b
print(result)
[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]

也为您的案例提供预期的结果。