MATLAB中的Netcdf填充值

时间:2013-07-02 10:41:53

标签: matlab netcdf

我在MATLAB中使用相当大的netcdf文件,包含以下变量:

    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个步骤。如果有足够的内存并且'chunk'足够小,MATLAB将以双精度写入'data',否则它将用int16编写。如果'data'是双精度,则等于'_FillValue'值的值将转换为NaN,而如果'data'在int16中,则相同的单元格现在将包含值-9999。为什么是这样? -1e + 004在int16的范围内,为什么MATLAB将其写为-9999,而不是-10000?

是因为int16(NaN)= 0,然后它落在数据的范围内,之后MATLAB对单元格应用-9999的默认填充值?

有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:0)

我认为填充值实际上是-9999。 这是一个不幸的展示问题。

>> nccreate('/tmp/t.nc','p','FillValue',-9999)
>> ncdisp /tmp/t.nc
Source:
           /tmp/t.nc
Format:
           netcdf4_classic
Variables:
    p
           Size:       1x1
           Dimensions: 
           Datatype:   double
           Attributes:
                       _FillValue = -1e+04