2016-07-26 40 views
0

我正在繪製來自衛星和天氣模型的風數據的pcolourmesh。這些值都存儲在一個netcdf文件中。下面我嘗試用NaN替換等於70或0的值,但這不會產生錯誤,但它也不會創建NaN,nozeros與原始數據集大小相同。我已經看了看數據,它確實有值== 70和0Python netcdf - 將指定的值轉換爲NaN

import netCDF4 as nc 
import numpy as np 
import matplotlib.pyplot as plt 
import csv as cs 
import pandas as pd 

ncfile = nc.Dataset('C:\Users\mmso2\Google Drive\ENVI_I-PAC_2007_10_21_21_22_47.nc') 
SARwind = ncfile.variables['sar_wind'] 
ModelWind = ncfile.variables['model_speed'] 
LON = ncfile.variables['longitude'] 
LAT = ncfile.variables['latitude'] 
LandMask = ncfile.variables['mask'] 

    #clean the data of values = 70 
    SARwind_nan = SARwind 

    for i in SARwind_nan: 
     if i.any() == 70: 
      i = np.nan 
     elif i.any()==0: 
      i = np.nan 

    nozeros=np.count_nonzero(~np.isnan(SARwind_nan)) 

另外,我要轉換的區域,其中LandMask> = 0到NaN時,有沒有更好的方式來做到這一點?

謝謝

回答

1

在代碼中有幾個問題,不考慮縮進語法錯誤。

下面的代碼將不會執行任何操作。什麼是i?結果不會被保存。

for i in SARwind_nan: 
     if i.any() == 70: 
      i = np.nan 
      ... 

下面是一個應該做你想做的事情的例子。

SARwind = np.array([ 
    [1,2,0,-4,-5], 
    [6,0,70,-9,-15], 
    [10,11,-12,70,-14], 
    [0,17,70,-19,-20], 
    ], dtype=np.float32) 

SARwind_nan = SARwind.copy() 
SARwind_nan[SARwind_nan == 0.0] = np.nan 
SARwind_nan[SARwind_nan == 70.0] = np.nan 

print SARwind_nan 

nozeros=np.count_nonzero(~np.isnan(SARwind_nan)) 
print nozeros 
+0

感謝您的意見。我已經設置了'SARwind_nan = SARwind [:]。copy()'作爲值來自netCDF文件,它似乎工作。 –