用一维数组乘以Numpy三维数组

7
我正在尝试将一个3D数组乘以一个1D数组,使得沿着第三个(深度: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
如果您的数组是 ab,您是否在寻找 b[:, None] * a - Alok Singhal
我刚刚尝试了以下代码:b=np.ones((3,2,2)) a=np.array(range(-1,2)) ans=b[:, None]*a但是它抛出了一个错误:ValueError: operands could not be broadcast together with shapes (1,3) (3,2,2)。我确定我只是做了一些愚蠢的事情? - dscm
9
在这种情况下,我认为您想要 a[:, None, None] * b - Alok Singhal
1
你要求“沿第三维堆叠的2D数组”,但你的示例是沿第一维堆叠的。 - Jaime
2
@Alok,既然它解决了问题,你可以将你的评论发布为答案。 - Saullo G. P. Castro
显示剩余2条评论
1个回答

2

假设b=np.ones((3,2,2))a=np.array([1,2,3])。我非常喜欢@Alok的答案,他使用了简单的a[:, None, None] * b,这肯定可以解决你的问题。但我不喜欢这种表述方式,因为它非常特定于维度。我的意思是,它只能用于三维数组,而在我的问题中,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]]]

给出与您情况相符的预期结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接