6

我正在尝试将 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] 相乘的结果。

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

谢谢你的帮助。

4

1 回答 1

1

让我们假设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]]]

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

于 2021-08-03T16:06:47.630 回答