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
相关产品推荐
相关产品推荐

