我有一个2D numpy数组,其形状为(3024,4032)。
我有一个3D numpy数组,其形状为(3024,4032,3)。
2D numpy数组填充0和1。
3D numpy数组填充0到255之间的值。
通过查看2D数组值,我想更改3D数组中的值。如果2D数组中的值为0,我将沿着最后一个轴将3D数组中的所有3个像素值更改为0。如果2D数组中的值为1,我将不会更改它。
我已经检查了这个问题,How to filter a numpy array with another array's values,但它适用于2个具有相同尺寸的数组。就我而言,尺寸不同。
如何在两个数组中应用过滤,在2个维度上具有相同的大小,但在最后一个维度上没有大小?
答案 0 :(得分:2)
好的,我会回答这个问题,以突出一个关于"缺失"尺寸。让'假设a.shape==(5,4,3)
和b.shape==(5,4)
当索引时,现有维度左对齐,这就是@Divakar的解决方案a[b == 0] = 0
有效的原因。
当广播时,现有尺寸正确对齐,这就是为什么@ InvaderZim a*b
不起作用的原因。您需要做的是a*b[..., None]
,它在右侧插入可广播的维度
答案 1 :(得分:1)
我认为这个很简单:
如果a是填充了值的3D数组(a.shape ==(5,4,3)),b是填充了1和0的2D数组(b.shape ==(5,4)) ,然后重塑b并乘以它们:
a = a * b.reshape(5, 4, 1)
Numpy会根据需要自动扩展数组。