NumPy中如何获取含inf值的被删除行的索引
实现方法
核心思路是先构造每行是否为全inf的布尔掩码,基于掩码既可以筛选保留行,也可以直接提取被删除行的索引,不需要额外遍历。
- 第一步:生成全inf行判断掩码
推荐用更鲁棒的判断逻辑,避免NaN值干扰判断结果:
如果你要沿用原有基于最小值判断的逻辑,也可以写为:import numpy as np # 逐行判断是否所有元素都是inf,返回布尔数组,True代表当前行是全inf待删除行 row_all_inf_mask = np.isinf(BD).all(axis=1)row_all_inf_mask = (BD.min(axis=1) == np.inf)注意:原有min判断逻辑存在隐患:如果行内混有NaN值,
min(axis=1)会返回NaN,NaN == np.inf结果为False,会把混有NaN和inf的行误判为非全inf行保留,优先推荐np.isinf().all()的写法。 - 第二步:提取被删除行的索引
直接通过np.where提取掩码中为True的位置,就是所有被删除行的原始索引,可以直接存为新数组:deleted_row_indices = np.where(row_all_inf_mask)[0] - 第三步:筛选得到去掉全inf行的目标数组
对掩码取反,筛选所有非全inf的行即可:finding_all_infValue = BD[~row_all_inf_mask]
效果示例
拿测试数组验证逻辑:
BD = np.array([ [np.inf, np.inf, np.inf], [1, 2, np.inf], [np.inf, 3, 4], [np.inf, np.inf, np.inf] ])
运行上述代码后:
deleted_row_indices输出为array([0, 3]),对应两个全inf行的原始索引finding_all_infValue输出为:
完全符合删除全inf行的需求。array([[ 1., 2., inf], [inf, 3., 4.]])
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

