编辑:由于我的第一个问题可能太凌乱,我将问题减少到最小
当我在标量单元格的条件上使用np.where时,一切正常:
new_array = np.where(old_array==6, rempl_array, old_array)
但是如果我想让我的条件在数组的完整维度上起作用:
new_array = np.where((old_array == [1, 2, 3]).all(axis=-1), rempl_array, old_array)
我不再,尺寸不匹配
但是我不知道如何在合适的3D布尔值中转换2D布尔值(old_array == [1、2、3])。all(axis = -1)>
这里是第一篇文章:
我有一个从图片创建的3D数组(因此尺寸适用于高度,宽度和RGB值)。我想根据给定的条件更改颜色。
submap = np.any([(carr == [pr["red"], pr["green"], pr["blue"]]).all(axis=-1) for pr in list_areas], axis=0)
条件很好,对于满足条件的像素,使用True投影2D数组,否则返回False。>
但是,当我尝试建立一个新的3D阵列时,我会根据该条件更改颜色:
new_carr = np.where(submap, new_color, carr)
我收到形状不匹配错误:
ValueError: operands could not be broadcast together with shapes (2048,5632) (3,) (2048,5632,3)
问题似乎不只是我的new_color具有形状(3,)的事实,因为当我用形状数组(2048,5632,3)替换它时,问题仍然存在,而我的条件是2D,而我的初始数组是3D。但是根据定义,这种情况怎么可能不是二维的呢?我该如何做呢?
感谢您的帮助
编辑:我简化为一个最小的问题,因为当我在标量单元格上使用np.where时,我的第一个问题可能太混乱了:一切正常:new_array = np.where(old_array == 6,...
实际上,我以非常难看的方式解决了我的问题
submap = np.array([[[b, b, b] for b in x] for x in submap.tolist()])
[从这张帕丁顿的海报图像开始: