将 Numpy 3D 数组乘以 1D 数组

dsc*_*scm 6 python arrays numpy multidimensional-array array-broadcasting

我试图将一个 3D 数组乘以一个 1D 数组,这样沿着第 3 个(深度:d)维度的每个 2D 数组的计算方式如下:

1D_array[d]*2D_array

我最终得到一个看起来像这样的数组,比如:

[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助。

小智 2

让我们假设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]]]
Run Code Online (Sandbox Code Playgroud)

还给出您案例的预期结果。