Numpy:如何在给定测试条件的多维数组中使用np.where?

问题描述 投票:-1回答:2

编辑:由于我的第一个问题可能太凌乱,我将问题减少到最小

当我在标量单元格的条件上使用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,...

python arrays numpy
2个回答
0
投票

实际上,我以非常难看的方式解决了我的问题

submap = np.array([[[b, b, b] for b in x] for x in submap.tolist()])

0
投票

[从这张帕丁顿的海报图像开始:

© www.soinside.com 2019 - 2024. All rights reserved.