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

如何在二维Numpy数组中基于指定列的取值筛选行?

Numpy二维数组行筛选问题解决方法

需求说明

需要从以下Numpy数组中筛选出索引为1的列值为1且索引为2的列值为0的行:

import numpy as np

a = np.array([[1, 1, 0, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 1, 1],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [0, 0, 0, 1, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 1, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 1, 0],
       [1, 0, 1, 1, 0]])

你的尝试问题分析

你写出的代码:

evidence = {1:1,2:0}
mask = a[:,list(evidence.keys())] == list(evidence.values())

得到的mask是二维布尔数组(每行对应原数组的一行,每个元素对应对应列的条件是否满足),但筛选行需要一维布尔数组(标记每行是否所有条件都满足),所以需要进一步处理。

完整解决代码

import numpy as np

a = np.array([[1, 1, 0, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 1, 1],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [0, 0, 0, 1, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 0],
       [1, 1, 1, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 1, 0, 0, 1],
       [1, 1, 0, 0, 0],
       [1, 0, 0, 1, 0],
       [1, 0, 1, 1, 0]])

evidence = {1:1,2:0}
cols = list(evidence.keys())
vals = list(evidence.values())
# 生成每行的条件判断结果,再按行取逻辑与,得到每行是否满足所有条件
mask = np.all(a[:, cols] == vals, axis=1)
# 用掩码筛选符合条件的行
result = a[mask]
print(result)

代码解释

  1. a[:, cols] == vals:对比指定列的值是否等于目标值,得到每行的布尔判断结果
  2. np.all(..., axis=1):对每行的布尔值取逻辑与,只有当该行所有列都满足条件时,结果为True
  3. a[mask]:用一维布尔掩码直接索引原数组,得到符合条件的所有行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:35:19