netcdf - 在 netcdf 文件中重命名维度
问题描述
我是初学者,nco
我希望能对我的工作流程提供一些建议,并为我遇到的问题提供一些帮助。
我有这些数据,其中包含两个不同时间步长的 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 ;
解决方案
首先,我推荐的命令是
ncecat -O -u time *.nc merged.nc
这样可以避免重命名record
为time
. 然后
ncks -O -x -v time merged.nc merged.nc
那样有用吗?
回答编辑的问题:
关于 ncrename 收到的错误,您可能遇到了此处描述的 netCDF4 库错误。推荐的解决方案是转换为 netCDF3,重命名,然后在需要时转换回 netCDF4:
ncks -3 in.nc out.nc
ncrename -d record,time out.nc
ncks -4 out.nc out.nc
推荐阅读
- php - 需要从 prestashop 1.7 中的类别搜索框中删除连字符
- string - 当字符串太长时,它会自动分成不同的行,而不是停留在单行上
- firebase - FirebaseAuth:getGoogleApiForMethod() 返回 Gms:com.google.firebase.auth.api.internal.zzal@489
- java - 如何自动将 textview 的值分配给字符串
- apache-kafka - kafka-connect-hdfs 连接器支持使用 FlatBuffer 模式保存字节数组和字段分区
- apache-kafka - kafka 标头和键值对
- xml - E: 包 'gccxml' 没有安装候选
- android - 如何在Android中执行单击ListView元素的按钮
- android - 在xamarin android中填充软输入调整大小
- javascript - 我在哪个 iframe 中?