我在MATLAB工作有相當大的netCDF文件,包含以下變量:的netCDF fillvalue在MATLAB
tg
Size: 272x214x23011
Dimensions: longitude,latitude,time
Datatype: int16
Attributes:
long_name = 'mean temperature'
units = 'Celsius'
standard_name = 'air_temperature'
_FillValue = -1e+004
scale_factor = 0.01
我使用的ncread函數讀取矩陣塊,如:
data = ncread(netcdfFile,'tg',[1 1 1],[Inf Inf 10]);
前10個時間步驟。如果有足夠的內存並且'塊'足夠小,MATLAB將以雙精度寫入'data',否則它將寫入int16。如果'data'是雙精度的,那麼等於'_FillValue'值的值將被轉換爲NaN,而如果'data'在int16中,相同的單元格現在將包含值-9999。爲什麼是這樣? -1e + 004在int16的範圍內,那爲什麼MATLAB把它寫成-9999,而不是-10000?
這是因爲int16(NaN)= 0,然後落在數據的範圍內,此後MATLAB將默認填充值-9999應用於單元格?
有人可以解釋發生了什麼?
「else it will written in int16」 - 你是否用WHOS或CLASS調用來確認課程?我相信如果存在_FillValue或scale_factor,它總是應該是double類型的。如果您需要原始數據,您可以考慮使用低級別(netcdf。*函數)。 –
是的,超過一定大小的提取被寫入int16。至少在使用ncread時。低級函數如何處理這個問題? – simondk