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

numpy浮点数组查找大于0.1值的索引时遇错误,求排查解决

问题描述

我正在进行数据分析,将数据导入为numpy浮点数组,其中部分值小于0。我选择了名为load的列,想要找到其中值大于0.1的索引,但触发了错误:

"only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices"

我的代码如下:

import numpy as np
import pandas as pd

data=pd.read_csv('C1.txt',delim_whitespace=True , 
                 skiprows=10, skip_blank_lines=True ) 
data_array=data.to_numpy()
load=data_array[10:,1]

res=list()
for idx in load:
    if load[idx] > 0.1:
        res.append(idx)

我的需求是找到数组中值超过0.1的索引,数据数组开头内容如下:

0.063   -0.00174    0.063   -0.00075
0.094   0.00628 0.094   -0.00089
0.125   0.01292 0.125   -0.00111
0.156   -0.00027    0.156   0.00015
0.188   -0.00319    0.188   0.00108
0.219   -0.00733    0.219   -0.0007
0.25    -0.02446    0.25    -0.00074
0.281   -0.01493    0.281   -0.00078
0.313   0.01339 0.313   0.00019
错误原因与解决方案

错误原因

你写的for idx in load是遍历load数组里的元素值,而非索引。比如load里的元素是-0.00174、0.00628这类浮点数,用浮点数作为索引访问load[idx],numpy会直接报错——因为索引必须是整数、切片等合法类型,浮点数索引不被支持。

正确实现方式

方法1:用numpy布尔索引快速获取(推荐)

numpy提供了高效的布尔索引方式,无需手动写循环:

import numpy as np
import pandas as pd

data = pd.read_csv('C1.txt', delim_whitespace=True, skiprows=10, skip_blank_lines=True)
data_array = data.to_numpy()
load = data_array[10:, 1]

# 获取值大于0.1的索引(返回numpy数组)
res = np.where(load > 0.1)[0]
# 若需要转成Python列表
res_list = res.tolist()

方法2:修复循环逻辑(适合理解基础原理)

如果非要用循环,得遍历数组的索引而非元素值:

import numpy as np
import pandas as pd

data = pd.read_csv('C1.txt', delim_whitespace=True, skiprows=10, skip_blank_lines=True)
data_array = data.to_numpy()
load = data_array[10:, 1]

res = []
# 遍历数组的索引范围
for idx in range(len(load)):
    if load[idx] > 0.1:
        res.append(idx)

注意:上述代码返回的是load数组的本地索引,如果需要对应原data_array的全局索引,要给每个索引加上10(因为load是从data_array第10行开始截取的),即改为res.append(idx + 10)。

内容的提问来源于stack exchange,提问作者Igor Moravčík

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:33:25