我想在numpy数组中加载一个文件,并在第3列中取值,因为在第1列找到了条件。
以下是.csv格式的数据样本:
step,lambda,rate,etotal
1001,0.0,0.1,-48044.2760681363
2000,0.0,0.1,-48031.1794623084
3000,0.1,0.1,-43205.9046309046
4000,0.2,0.1,-38388.9135212169
5000,0.3,0.1,-33578.2019598638
6000,0.4,0.1,-28770.5652389722
7000,0.5,0.1,-23964.1873174772
8000,0.7,0.1,-14375.4972097742
9000,0.8,0.1,-9572.458083405
10000,0.9,0.1,-4767.3654814475
11000,1,0.1,32.5943003495421
我的简化代码是:
import numpy as np
df = np.genfromtxt('teste.csv', delimiter = ',')
rate = 0.1
idx = np.arange(0, 1+rate, rate)
for i in idx:
print(df[:,3][df[:,1] == i])
我得到以下输出:
%run "plot_data.py"
0.0 [-48044.27606814 -48031.17946231]
0.1 [-43205.9046309]
0.2 [-38388.91352122]
0.3 []
0.4 [-28770.56523897]
0.5 [-23964.18731748]
0.6 []
0.7 []
0.8 [-9572.4580834]
0.9 [-4767.36548145]
1.0 [ 32.59430035]
可以看到,对于第1列,值为0.3,0.6,0.7,Python返回一个空数组。我不明白为什么。
如果我输入一个Python窗格,相同的命令,但在Python窗格中手动更改为0.3,我会找到我想要的答案:
In [17]: df[:,3][df[:,1] == 0.3]
Out[17]: array([-33578.20195986])
我不理解和做错什么?
答案 0 :(得分:0)
我认为你应该使用print(df[:,3][np.isclose(df[:,1], i)])
。如果使用比较运算符,则可能存在导致这些类型错误的浮点不准确。
作为一个单独的问题,您的测试数据对lambda = 0.6
完全没有价值。我的修复程序无法解决这个问题,您需要获取具有该值的数据集或使用另一种算法来猜测周围的值。
答案 1 :(得分:0)
你不应该比较浮点数。
for i in np.arange(0,1.1, 0.1):
print(df[:,3][abs(df[:,1]-i) < 1e-5])
输出:
[-48044.27606814 -48031.17946231]
[-43205.9046309]
[-38388.91352122]
[-33578.20195986]
[-28770.56523897]
[-23964.18731748]
[]
[-14375.49720977]
[-9572.4580834]
[-4767.36548145]
[ 32.59430035]