我正在尝试将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]正确相乘的结果。
我已经尝试了一段时间,无论我做什么,我都无法得到这个结果,只是主题的变化。我该如何正确地做到这一点?
感谢您的帮助。
答案 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]]]
也为您的案例提供预期的结果。