2017-12-15 5 views
3

私は私のデータのサンプルがある以下のnumpyの配列にファイルをロードし、条件は、カラム1Pythonのエラー:空のスライスの平均

で発見されて以来、3列目の値を取りたいです.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のために手動で変更した場合は1に注意することができますように、私は私の希望答えを見つける:

In [17]: df[:,3][df[:,1] == 0.3] 
Out[17]: array([-33578.20195986]) 

は、私が何を理解しておりません間違って?

答えて

0

私はあなたがprint(df[:,3][np.isclose(df[:,1], i)])を使うべきだと思います。比較演算子を使用すると、浮動小数点の不正確さが原因でこれらの種類のエラーが発生することがあります。

別の問題として、テストデータにはlambda = 0.6の値がまったくありません。私の修正はそれを修正しません、あなたはその値を持つデータセットを取得するか、周囲のものからその値を推測する別のアルゴリズムを使用する必要があります。

+0

感謝。私はnp.isclose()について知らなかった。ギャラクシーの答えも正しい方向ですが、あなたの提案はより適切です。私がデータを準備したとき、私は欠けている値に注意を払わなかった。 – pmoreira

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]