聚合不同的 netcdf 变量并写入输出
Aggregate different netcdf variables and write output
我有一个包含 3 个变量的 netcdf 文件,分别命名为 v1
、v2
、v3
。
我想聚合这些变量并创建一个新变量 v4
,如下所示:
v4 = (v1*0.1)+(v2*0.2)+(v3*0.2)
我知道如何使用 cdo 聚合 2 个变量:
cdo expr,’sum=var1+var2;’ ifile ofile
但是我怎样才能处理更具体的 netcdf 计算,比如所需的计算?
CDO 将能够处理您需要的公式:
cdo expr,’v4=(v1*0.1)+(v2*0.2)+(v3*0.2)’ ifile ofile
如果要将变量添加到文件中,只需执行以下操作:
cdo aexpr,’sum=var1+var2;v4=(v1*0.1)+(v2*0.2)+(v3*0.2)’ ifile ofile
您也可以使用 ncap2 作为替代
ncap2 -O -s "v4=(v1*0.1)+(v2*0.2)+(v3*0.2)" ifile.nc ofile.nc
虽然我通常会按照 Robert Wilson 的建议使用 cdo 解决方案,但 nco 的好处是也能够定义所有元数据:
ncatted -O -a units,v4,c,c,"units goes here" ofile.nc
ncatted -O -a long_name,v4,c,c,"long_name goes here" ofile.nc
编辑:正如查理在他对这个问题的回答中正确指出的那样,我应该强调 ncap2 从源变量移植元数据这一事实,因此如果单元等元数据已经存在,您需要指定新值根据他的回答在 ncap 命令中,或在这些属性的“修改”模式下使用 ncatted。
默认情况下,NCO 将元数据从 RHS 上的第一个变量传播到 LHS,因此 v4
获得与 Adrian 示例中的 v1
相同的属性。您可以在同一个 ncap2
命令中更改或扩充这些属性,使用 at 符号 @
来命名属性,例如
ncap2 -O -s 'v4=(v1*0.1)+(v2*0.2)+(v3*0.2);v4@long_name="Fourth variable";v4@units="meters"' in.nc out.nc
我有一个包含 3 个变量的 netcdf 文件,分别命名为 v1
、v2
、v3
。
我想聚合这些变量并创建一个新变量 v4
,如下所示:
v4 = (v1*0.1)+(v2*0.2)+(v3*0.2)
我知道如何使用 cdo 聚合 2 个变量:
cdo expr,’sum=var1+var2;’ ifile ofile
但是我怎样才能处理更具体的 netcdf 计算,比如所需的计算?
CDO 将能够处理您需要的公式:
cdo expr,’v4=(v1*0.1)+(v2*0.2)+(v3*0.2)’ ifile ofile
如果要将变量添加到文件中,只需执行以下操作:
cdo aexpr,’sum=var1+var2;v4=(v1*0.1)+(v2*0.2)+(v3*0.2)’ ifile ofile
您也可以使用 ncap2 作为替代
ncap2 -O -s "v4=(v1*0.1)+(v2*0.2)+(v3*0.2)" ifile.nc ofile.nc
虽然我通常会按照 Robert Wilson 的建议使用 cdo 解决方案,但 nco 的好处是也能够定义所有元数据:
ncatted -O -a units,v4,c,c,"units goes here" ofile.nc
ncatted -O -a long_name,v4,c,c,"long_name goes here" ofile.nc
编辑:正如查理在他对这个问题的回答中正确指出的那样,我应该强调 ncap2 从源变量移植元数据这一事实,因此如果单元等元数据已经存在,您需要指定新值根据他的回答在 ncap 命令中,或在这些属性的“修改”模式下使用 ncatted。
默认情况下,NCO 将元数据从 RHS 上的第一个变量传播到 LHS,因此 v4
获得与 Adrian 示例中的 v1
相同的属性。您可以在同一个 ncap2
命令中更改或扩充这些属性,使用 at 符号 @
来命名属性,例如
ncap2 -O -s 'v4=(v1*0.1)+(v2*0.2)+(v3*0.2);v4@long_name="Fourth variable";v4@units="meters"' in.nc out.nc