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

如何通过索引数组正确提取NumPy数组中的指定行

问题原因
  • 你写的第一行代码finding_all_infValue=np.asarray(BD[BD.min(axis=1) != np.inf])本身逻辑正确,可以正常取出所有最小值不是inf的行,报错来自后续索引计算的逻辑错误。
  • 核心报错点来自np.where的写法错误:你给判断条件BD.min(axis=1) == np.inf外层多套了一对方括号,把原本长度为数组行数的一维布尔数组,转成了形状为(1, 行数)的二维数组;无意义的维度包裹很容易搞混np.where返回值的索引顺序,导致取错下标触发索引报错。
  • 额外问题:实现逻辑冗余,numpy的布尔索引本身支持直接按行筛选,不需要单独调用np.where取索引再二次索引,多写一步反而增加出错概率。
正确实现方法

方法1:最简布尔索引(推荐)

直接把行判断条件作为下标传入数组,一步完成筛选,不需要单独计算行索引:

# 筛选整行所有值都是inf的行(和原逻辑判断min==inf的规则一致)
new_array = BD[BD.min(axis=1) == np.inf]

如果实际需求是只要行内包含任意一个inf就提取该行,把判断条件替换为np.isinf的行级判断即可:

# 筛选存在至少一个inf值的行
new_array = BD[np.isinf(BD).any(axis=1)]

方法2:先取索引再筛选(适配需要复用索引的场景)

如果后续逻辑需要用到符合条件的行索引,去掉np.where条件外层多余的方括号即可,注意一维条件下np.where返回的元组第0位才是行下标:

# 注意不要给判断条件加外层[],返回值取[0]拿到行索引
indx = np.where(BD.min(axis=1) == np.inf)[0]
new_array = BD[indx, :]
测试验证

可以用样例数组验证逻辑正确性:

import numpy as np
BD = np.array([
    [1, 2, 3],
    [np.inf, np.inf, np.inf],
    [4, np.inf, 5],
    [7, 8, 9]
])

# 筛选全inf行
new_array = BD[BD.min(axis=1) == np.inf]
print(new_array)
# 输出:[[inf inf inf]]

# 筛选含任意inf的行
new_array_has_inf = BD[np.isinf(BD).any(axis=1)]
print(new_array_has_inf)
# 输出:
# [[inf inf inf]
#  [ 4. inf  5.]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:57:07