【问题标题】:renaming dimension in netcdf file在 netcdf 文件中重命名维度
【发布时间】:2018-06-04 07:27:25
【问题描述】:

我是 nco 的初学者,我希望能对我的工作流程提供一些建议,并为我遇到的问题提供一些帮助。

我有these data,其中包含两个不同时间步长的 3D 盐度值:

dimensions:
    t = 780 ;
    z = 54 ;
    y = 450 ;
    x = 3600 ;
variables:
    double time(t) ;
        time:units = "days since 1-1-1 00:00:0.0" ;
    float level(z) ;
        level:units = "[m]" ;
    float lat(y) ;
    float lon(x) ;
    float salt(x, y, z) ;
        salt:units = "psu * 1000 + 35" ;
        salt:missingvalue = "-1.0E34" ;
        salt:longname = "salinity" ;

我想连接两个 netcdf 文件。

为此,我首先使用ncecat *.nc -O merged.nc

dimensions:
    record = UNLIMITED ; // (2 currently)
    t = 780 ;
    z = 54 ;
    y = 450 ;
    x = 3600 ;
variables:
    double time(record, t) ;
        time:units = "days since 1-1-1 00:00:0.0" ;
    float level(record, z) ;
        level:units = "[m]" ;
    float lat(record, y) ;
    float lon(record, x) ;
    float salt(record, x, y, z) ;
        salt:units = "psu * 1000 + 35" ;
        salt:missingvalue = "-1.0E34" ;
        salt:longname = "salinity" ;

现在变量time 和维度t 是虚假的。所以,我用ncks -O -x -v time merged.nc merged.nc删除它们:

    record = UNLIMITED ; // (2 currently)
    y = 450 ;
    z = 54 ;
    x = 3600 ;
variables:
    float lat(record, y) ;
    float level(record, z) ;
        level:units = "[m]" ;
    float lon(record, x) ;
    float salt(record, x, y, z) ;
        salt:units = "psu * 1000 + 35" ;
        salt:missingvalue = "-1.0E34" ;
        salt:longname = "salinity" ;

现在,我想将维度 record 重命名为:ncrename -d record,time merged.nc。该命令运行时没有错误或警告。但是当我做ncdump -h merged.nc 我得到这个错误

ncdump:merged.nc:NetCDF:HDF 错误

这是什么意思?我哪里做错了?

编辑

按照Charlie Zender发布的答案

ncecat -O -u time *.nc merged.nc
ncks -O -x -v time merged.nc merged.nc

结果:

dimensions:
    time = UNLIMITED ; // (2 currently)
    y = 450 ;
    z = 54 ;
    x = 3600 ;
    t = 780 ;
variables:
    float lat(time, y) ;
    float level(time, z) ;
        level:units = "[m]" ;
    float lon(time, x) ;
    float salt(time, x, y, z) ;
        salt:units = "psu * 1000 + 35" ;
        salt:missingvalue = "-1.0E34" ;
        salt:longname = "salinity" ;
    double time(time, t) ;
        time:units = "days since 1-1-1 00:00:0.0" ;

// global attributes:
        :history = "Tue Jun  5 09:08:25 2018: ncks -O -x -v time merged.nc merged.nc\nTue Jun  5 09:08:19 2018: ncecat -O -u time OFES_salt_mmean_607.nc OFES_salt_mmean_608.nc merged.nc" ;
        :NCO = "netCDF Operators version 4.7.4 (http://nco.sf.net)" ;
        :nco_openmp_thread_number = 1 ;

【问题讨论】:

    标签: netcdf nco


    【解决方案1】:

    首先,我推荐的命令是

    ncecat -O -u time *.nc merged.nc
    

    这样就无需将record 重命名为time。那么

    ncks -O -x -v time merged.nc merged.nc
    

    这行得通吗?

    对已编辑问题的回答:

    关于 ncrename 收到的错误,您可能遇到了 here 中描述的 netCDF4 库错误。推荐的解决方案是转换为 netCDF3,重命名,然后根据需要转换回 netCDF4:

    ncks -3 in.nc out.nc
    ncrename -d record,time out.nc
    ncks -4 out.nc out.nc
    

    【讨论】:

    • 谢谢!它工作得更好,但在结果文件中仍然有维度t。我怎样才能删除它?
    • 发布结果文件的标题
    猜你喜欢
    • 2022-01-03
    • 2013-12-11
    • 2015-02-05
    • 1970-01-01
    • 2013-09-22
    • 2020-09-11
    • 2017-11-17
    • 2018-03-20
    • 2021-09-22
    相关资源
    最近更新 更多