当前位置: 首页 > 知识库问答 >
问题:

Netcdf fillvalue in MATLAB

苏雅珺
2023-03-14

我在 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个时间步。如果有足够的内存并且“块”足够小,MATLAB将以双精度写入“数据”,否则将以int16写入。如果“数据”是双精度,等于“_FillValue”值的值将转换为NaN,而如果“数据”是int16,相同的单元格现在将包含值-9999。为什么会这样?-1e 004在int16的范围内,那么为什么MATLAB将其写入-9999,而不是-10000?

是因为int16(NaN)=0,然后落入数据范围内,然后MATLAB将默认填充值-9999应用于单元格吗?

有人能解释一下这是怎么回事吗?

共有1个答案

彭烨烁
2023-03-14

我相信填充值实际上是-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
 类似资料:

相关问答

相关文章

相关阅读