2011-07-15 7 views
19

数値をnumpyで置き換えようとしていますが、逆の場合を除いてnumpy.nan_to_numのような関数を探しています。Numpy - 数値をNaNに置き換えます

番号は、それぞれ異なる配列が処理されるときに、NoDataValueを一意に定義できるため、変更される可能性があります。私は辞書を使っている人たちを見ていますが、配列は大きく、正と負の両方の浮動小数点数でいっぱいです。私は、キーを作成するためにこれらのすべてをロードすることは効率的ではないと考えています。

私はany()またはall()を使用する必要があり、numpyを使用してみました。私は要素を賢明に反復する必要があることを認識していますが、組み込み関数がこれを達成できることを願っています。

def replaceNoData(scanBlock, NDV): 
    for n, i in enumerate(array): 
     if i == NDV: 
      scanBlock[n] = numpy.nan 

NDVはGDALのデータ値ではなく、配列はnumpy配列です。

マスクされたアレイはおそらく行く方法ですか?

+1

ための指標として用いることができるブール配列を生成します。それは正しく動作しませんか? –

+0

@Chris Greggこの解決方法ではインデントが必要で、配列を返す必要はありません(np.arrayとの混乱を避けるために変数として 'array'を使用することは避けてください)が、最も重要なことはひどくなります典型的なnumpyの索引付けおよび放送と比較して遅い。 – Paul

+0

@Paul私の懸念はスピードだったので、以下の答えに感謝します。変数を使ってコードを明確にするだけで、配列の使用も避けています。 – Jzl5325

答えて

35
A[A==NDV]=numpy.nan 

A == NDVは、私は、私はあなたが提供するソリューションと間違っているものを理解していない

+0

はnumpy.nanは特別な値ですか?私はGoogleを介してそれを見つけることができないようです... – alwaysaskingquestions

+1

これは、使用しているデータ型の有効範囲外のビットの特別なシーケンスです。これは、不足しているデータや、有効な値を生成しなかった数学エラーの結果を示すのに使用されます。これがうまくいくと思う:https://en.wikipedia.org/wiki/NaN – Paul

+0

はいはい!ありがとうございました :) – alwaysaskingquestions

関連する問題