聚合不同的 netcdf 变量并写入输出

Aggregate different netcdf variables and write output

我有一个包含 3 个变量的 netcdf 文件,分别命名为 v1v2v3。 我想聚合这些变量并创建一个新变量 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