Python如何查找数组中所有列值均为inf的行
Python筛选全列值均为inf的数组行实现方法
绝大多数n*m维度的数值数组处理场景都基于numpy实现,以下分别给出numpy环境和原生Python列表环境的实现方案:
numpy数组实现(推荐,处理大数组效率最高)
核心逻辑分两步:
- 逐元素判断数组值是否为inf,生成同维度的布尔掩码数组
- 沿列方向对每行做全真判断,筛选出所有元素都为inf的行
import numpy as np # 测试数组,其中索引为1的行是全inf行 demo_arr = np.array([ [2, np.inf, 7], [np.inf, np.inf, np.inf], [4, 9, np.inf] ]) # 逐元素识别inf值,支持识别正inf、负inf inf_mask = np.isinf(demo_arr) # 按行判断是否所有元素都是inf,得到行级布尔掩码 all_inf_row_mask = inf_mask.all(axis=1) # 获取所有全inf行的索引 all_inf_row_index = np.where(all_inf_row_mask)[0] # 直接提取所有全inf行的内容 all_inf_rows = demo_arr[all_inf_row_mask]
如果只需要筛选全为正inf的行,把逐元素判断的逻辑替换为demo_arr == np.inf即可;如果只筛选全为负inf的行,替换为demo_arr == -np.inf。
原生Python嵌套列表实现
如果使用的是Python原生嵌套列表结构,没有依赖numpy,可以借助内置all()函数配合math模块的inf判断实现:
import math # 测试嵌套列表 demo_list = [ [2, float('inf'), 7], [float('inf'), float('inf'), float('inf')], [4, 9, float('inf')] ] all_inf_rows = [] all_inf_row_index = [] for idx, row in enumerate(demo_list): # 逐行判断所有元素是否为inf if all(math.isinf(item) for item in row): all_inf_rows.append(row) all_inf_row_index.append(idx)
注意:不建议直接用
item == float('inf')做判断,该写法无法识别负inf值,仅在确定只需要匹配正inf的场景下使用。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

