2017-03-16 119 views
0

我使用地理數據,並使用gdal導入到python中的大型光柵文件。爲了處理它們,我將它們轉換爲numpy陣列。將NaN值從一個numpy數組轉換爲另一個

我創建了一個空數組,用循環中的數據填充。但是,我需要將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值被轉移到我的dataOut數組中。這些解決方案中沒有一個建議here爲我而... dataOut數組仍然只保留零。

+0

你爲什麼要檢查'如果isinstance(數據[C] [R],no.ndarray)'?對於二維數組,這絕不會是真的......您可能只想要'dataOut [np.isnan(data))' –

+0

這不工作不幸(沒有錯誤信息,根本沒有改變)。 dataOut仍然只保留0,而不是數據中那些位置的NaN。 – GeoEki

回答

0

想通了自己... np.isnan是解決方案:

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'這正是我想要寫在上面。 –

相關問題