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

如何用NumPy快速筛选mask值为0的二维坐标数组?

用NumPy高效提取mask值为0的对应点

你原来用map遍历每个点的方式属于Python层面的逐元素操作,数据量大的时候效率很低。NumPy的矢量化操作能解决这个问题,直接通过高级索引一次性完成判断和过滤:

优化后的代码

import numpy as np

mask = np.array([[0, 0, 0, 255, 255],
                 [0, 0, 0, 0, 255],
                 [0, 0, 0, 0, 0],
                 [0, 0, 0, 0, 0],
                 [255, 255, 0, 0, 0]])

pts0 = np.array([[1, 1], [1, 4], [0, 4], [2, 2], [3, 3]])

# 直接用矢量化索引获取mask对应位置的值,生成布尔掩码后过滤
pts0_filtered = pts0[mask[pts0[:, 1], pts0[:, 0]] == 0]

print(pts0_filtered)  # [[1 1]
                      #  [2 2]
                      #  [3 3]]

原理说明

  • pts0[:, 1]提取所有点的y坐标,pts0[:, 0]提取x坐标,NumPy支持用这两个一维数组作为索引,直接取出mask中对应位置的所有值(这一步是矢量化计算,没有Python循环)
  • 用== 0生成布尔数组,标记哪些点符合条件
  • 最后用布尔数组索引pts0,直接得到过滤后的结果

这种方式的计算全部在NumPy底层的C实现中完成,当处理大规模点集时,速度会比原来的map方法快很多,完全避免了Python循环的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:18:36