使用numpy.where查找二维数组索引时遭遇TypeError问题求助
问题解决:二维列表中查找第一列等于0.1的元素索引
错误原因
你定义的Data是Python原生列表,不是numpy数组,[:,0]是numpy专属的切片语法,原生列表不支持这种元组形式的索引,所以会抛出TypeError: list indices must be integers or slices, not tuple错误。
两种解决方法
方法一:转成numpy数组处理
先把原生列表转换成numpy数组,就能正常使用numpy的索引和np.where函数了:
import numpy as np Data = [[0, 1], [0.075, 1], [0.1, 1], [0.11, 1], [0.125, 1]] # 转换成numpy数组 np_data = np.array(Data) # 查找第一列等于0.1的索引 print(np.where(np_data[:, 0] == 0.1))
注意:浮点数存在精度问题,如果0.1是计算生成的,建议用np.isclose替代==,避免因精度误差找不到结果:
print(np.where(np.isclose(np_data[:, 0], 0.1)))
方法二:纯Python列表处理(无需numpy)
如果不想依赖numpy,直接用列表推导式+enumerate遍历即可:
Data = [[0, 1], [0.075, 1], [0.1, 1], [0.11, 1], [0.125, 1]] # 收集符合条件的索引 indices = [i for i, row in enumerate(Data) if row[0] == 0.1] print(indices)
同样,考虑浮点数精度的话,可以改成:
indices = [i for i, row in enumerate(Data) if abs(row[0] - 0.1) < 1e-9]
内容的提问来源于stack exchange,提问作者vinc00
相关产品推荐
相关产品推荐

