2011-11-07 6 views
5

データなしの値として1.0e6の2D numpy配列があります。私はデータのヒストグラムを生成したいと思います。成功している間は、これを実行する最善の方法ではありません。matplotlib特定のデータ値を無視してhistを返します

from matplotlib import pyplot 
import sys 

eps = sys.float_info.epsilon 
no_data = 1.0e6 

e_data = elevation.reshape(elevation.size) 
e_data_clean = [ ] 

for i in xrange(len(e_data)): 
    val = e_data[i] 
    # floating point equality check for val aprox not equal no_data 
    if val > no_data + eps and val < no_data - eps: 
     e_data_clean.append(val) 

pyplot.hist(e_data_clean, bins=100) 

クリーン(このため、より速く、ずっと1つのライナー)がなければならないようです。ある?

答えて

9

あなたが必要なインデックスを選択するためにブール配列を使用することができます指定されたインデックスでe_dataと同じ形状でnp.boolのアレイを作成する

selected_values = (e_data > (no_data + eps)) & (e_data < (no_data - eps)) 
pyplot.hist(e_data[selected_values]) 

(e_data > (no_data + eps))Trueに設定のみ値は、IFとIFその指数は(no_data + eps)より大きい。 &は、両方の条件を満たす要素別のの演算子です。

また、no_dataが慣習に過ぎない場合は、代わりにnumpy.nanに設定し、e_data[numpy.isfinite(e_data)]を使用します。

関連する問題