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

仅传入单个二维布尔数组时np.where的运行逻辑与应用场景疑问

np.where单布尔参数用法说明

核心运行逻辑

当np.where()仅传入1个布尔类型的数组作为参数时,功能是返回数组中所有值为True的元素的坐标索引:

  • 返回结果是一个长度和输入数组维度一致的元组,元组的第i个元素是所有符合条件的元素在第i维度上的索引组成的一维数组
  • 索引的输出顺序默认按行优先(C语言顺序)排列

对应你给出的示例做验证:
第一个示例的输入数组为3行3列的二维布尔数组:

z = [[True, False, True],
     [True, True, True],
     [False, False, False]]

按行优先遍历,所有值为True的元素坐标依次是(0,0)、(0,2)、(1,0)、(1,1)、(1,2),因此返回的行坐标数组为[0 0 1 1 1],列坐标数组为[0 2 0 1 2],和你得到的输出完全一致。
另外两个修改后的示例也符合该逻辑:

  • 修改为2行3列数组[[True, False, True],[True, True, True]]时,原3行版本的第三行全为False,没有符合条件的元素,因此返回结果和3行版本一致
  • 修改为2行2列数组[[True, False],[True, True]]时,符合条件的坐标依次是(0,0)、(1,0)、(1,1),因此返回行坐标[0 1 1]、列坐标[0 0 1],和输出匹配

常见应用场景

  • 掩码类图像处理:比如语义分割、文本生成场景中,快速提取指定类别区域、文本有效区域的所有像素坐标,用于后续的区域裁剪、特征统计、标注绘制等操作,你提到的SynthText仓库中就是用该方法定位可放置文本的有效区域。
  • 数值数组条件筛选:对数值数组做阈值判断得到布尔掩码后,可直接用该方法取出所有符合阈值条件的元素位置,也可直接配合索引取值,比如arr[np.where(arr > 10)]即可快速取出数组中所有大于10的元素,执行效率远高于手写循环遍历。
  • 稀疏数据处理:快速提取稀疏矩阵、稀疏采样数据中的非零/有效元素坐标,用于稀疏结构存储、数据压缩等场景。
  • 条件计数:直接取返回索引数组的长度,即可快速统计符合条件的元素总数,比如len(np.where(z)[0])即可得到数组z中True的总个数。

内容的提问来源于stack exchange,提问作者Subramanya Krishna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:21:00