2017-03-16 14 views
0

私は地理データを扱い、大きなラスタファイルを持っています。私はgdalでPythonにインポートします。それらを処理するために、私はそれらをnumpy配列に変換します。numpyの配列から別の配列にNaN値を転送する

私はループ内のデータでいっぱいになる空の配列を作成します。しかし、NaN値は、インポートされた評価者ファイルと同じ場所にある必要があります。

data = ds.GetRasterBand(1).GetNoDataValue() 
data = np.array(ds.GetRasterBand(1).ReadAsArray()) 
data[data==-9999] = np.nan # set all -9999 as no data value 

cols, rows = data.shape 
dataOut = np.zeros([ds.RasterYSize, ds.RasterXSize]) # create empty array with zeros 
for c in range(cols): 
    for r in range(rows): 
     dataOut[c][r] = np.nan if isinstance(data[c][r], np.ndarray) else dataOut[c][r] 

私のデータ配列からのNaN値をmy dataOut配列に転送する必要があります。それらの解決策のどれも私にとってhereが駄目だと示唆していませんでした... dataOut配列はまだゼロだけを保持しています。

+0

チェックしていますか? 2次元配列の場合は決して真実ではないでしょう...おそらく 'dataOut [np.isnan(data)]' –

+0

がうまくいきません。残念ながら(エラーメッセージなしで、まったく変更がありません)。 dataOutは、データ内のNaNの代わりに0だけを保持します。 – GeoEki

答えて

0

は自分自身をそれを考え出した... np.isnanが解決されています。なぜ ``でisinstance場合(データ[C] [R]、no.ndarray)を

for c in range(cols): 
    for r in range(rows): 
     dataOut[c][r] = np.nan if np.isnan(data[c][r]) else dataOut[c][r] 
+1

ループしないでください。あなたは 'dataOut [np.isnan(data)] = np.nan'を書きたいと思っていました。 –

関連する問題