0

次の変数を含むかなり大きな netcdf ファイルを使用して 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 は「データ」を倍精度で書き込みます。それ以外の場合は int16 で書き込みます。「data」が倍精度の場合、「_FillValue」の値に等しい値は NaN に変換されますが、「data」が int16 の場合、同じセルには値 -9999 が含まれます。どうしてこれなの?-1e+004 は int16 の範囲内にあるのに、なぜ MATLAB は -10000 ではなく -9999 と書き込むのでしょうか?

int16(NaN) = 0 がデータの範囲内に収まった後、MATLAB がデフォルトの fillvalue -9999 をセルに適用するためでしょうか?

誰かが何が起こっているのか説明できますか?

4

1 に答える 1

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
于 2013-07-02T12:27:09.653 に答える