如何基于多个指定值过滤2D numpy数组的行
解决方案
问题原因
你之前的写法不生效是因为数组直接和列表做!=比较时会触发广播机制进行逐元素对比,最终返回的布尔数组形状和你传入的排除值列表一致,无法作为二维数组的行索引掩码。
正确实现方式
使用NumPy内置的np.isin()方法构建过滤掩码即可,示例代码如下:
import numpy as np # 定义要排除的最后一列取值 exclude_values = [1, 2, 4] # 生成保留行的布尔掩码,~ 代表逻辑取反 mask = ~np.isin(data[:, -1], exclude_values) # 用掩码索引数组得到过滤后的结果 data = data[mask]
也可以简化为一行写法:data = data[~np.isin(data[:, -1], [1, 2, 4])]
代码说明
np.isin(arr, target_list):会逐个判断arr中的元素是否存在于target_list中,返回和arr形状完全一致的布尔数组- 前缀
~是NumPy中的按位取反运算符,会把布尔数组中的True和False互换,得到「元素不在排除列表中」的保留行掩码 - 用生成的一维布尔掩码索引原二维数组,就可以直接过滤掉所有不符合要求的行
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

