如何基于三维ndarray前两个波段生成符合条件的二维掩膜数组
报错根因
- numpy不支持
0.2 < array[1] < 0.4这种连续比较语法,该写法实际执行逻辑是先计算0.2 < array[1]得到布尔数组,再直接将整个布尔数组和0.4做判断,完全不符合逐元素判断区间的预期。 - 你生成的mask是*(794, 1255)维度的二维布尔数组,直接用来索引(3, 794, 1255)*的三维数组时,维度匹配规则不匹配,触发索引错误。
正确实现
生成符合要求的二维0/1掩膜
# 拆分区间比较条件,每个条件单独加括号避免运算符优先级问题 mask_bool = (array[0] > 0.65) & (array[1] > 0.2) & (array[1] < 0.4) # 布尔数组直接转int即可得到0/1掩膜,尺寸和xy维度完全对应 mask = mask_bool.astype(int)
该实现基于numpy原生向量化运算,无额外循环,处理大尺寸阵列时性能最优,是当前场景下的最优写法。
常见衍生操作
如果需要基于掩膜提取原三维数组的有效像素:
# 输出维度为(3, 有效像素个数),每列对应一个有效像素的三个波段值 valid_values = array[:, mask_bool]
如果需要将原数组不满足条件的像素全部置0:
# 给掩膜增加波段维度,和原数组维度对齐后赋值 array[~np.expand_dims(mask_bool, axis=0)] = 0
内容的提问来源于stack exchange,提问作者Reut
相关产品推荐
相关产品推荐

