You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于三维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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:36:02