1

foll を含む netCDF ファイルがあります。ncdump:

netcdf nc_data {
dimensions:
    lon = 1440 ;
    bounds = 2 ;
    lat = 720 ;
    time = UNLIMITED ; // (6 currently)
variables:
    double lon_bounds(lon, bounds) ;
    double lat_bounds(lat, bounds) ;
    int time(time) ;
        time:units = "year as %Y.%f" ;
        time:calendar = "proleptic_gregorian" ;
        time:long_name = "time" ;
        time:standard_name = "time" ;
        time:axis = "T" ;
    float lat(lat) ;
        lat:units = "degrees_north" ;
        lat:long_name = "latitude" ;
        lat:standard_name = "latitude" ;
        lat:axis = "Y" ;
        lat:bounds = "lat_bounds" ;
    float lon(lon) ;
        lon:units = "degrees_east" ;
        lon:long_name = "longitude" ;
        lon:standard_name = "longitude" ;
        lon:axis = "X" ;
        lon:bounds = "lon_bounds" ;
    float valf(time, lat, lon) ;
        valf: standard_name = “area_fraction”
        valf:missing_value = -9999.f ;
        valf:_fillvalue = -9999.f ;
        valf:long_name = "val fraction" ;
        valf:units = "fraction of grid cell" ;
}

すべての変数と次元を int/float から double に変換する nco コマンドはありますか?

私はこれを見つけました:

ncap2 -s 'valf=double(valf)' nc_data.nc nc_data.nc

ただし、これは一度に1つの変数しか機能せず、ファイルには約30の変数があります

4

1 に答える 1

2

ncap2 はこれをエレガントに行うことができますが、現在のスナップショット (まもなく 4.6.0 になります) が必要です。上記で使用したコマンドは、NCO バージョン 4.5.3 以降、出力ファイル内の変数のタイプを変更せず、現在のスナップショットでは機能することに注意してください。(ncap2 の暫定バージョンでは、型を変更するために、出力変数が入力とは異なる名前を持つ必要がありますval_dbl=double(valf)

重要なのは、ncap2の現在のスナップショットが変数リストを理解することです。したがって、次のスクリプトを使用して、名前を変更した特定の変数の出力ファイルを作成できます。

@all=get_vars_in();
*sz=@all.size();

for(idx=0;idx<sz;idx++){

  @var_nm=sprint(@all(idx));

  if( *@var_nm.type() == NC_INT || *@var_nm.type() == NC_FLOAT )
   *@var_nm=*@var_nm.double();

}

変数の名前を変更する必要はありません。

于 2016-04-22T19:57:21.850 に答える