从 NCO 4.6.7(2017 年 5 月)开始,我们将 missing() 函数添加到 ncap2 以优雅地解决这个问题。通过时间计算缺失值:
ncap2 -s 'mss_val=three_dmn_var_dbl.missing().ttl($time)' in.nc out.nc
这里 ncap2 将两个方法链接在一起,missing(),然后是时间维度上的总和。二维变量 mss_val 在 out.nc 中。下面的响应是相同的,但在空间上取平均值并通过时间报告(因为我误解了 OP)。
旧/过时的答案:
使用 NCO/ncap2 有两种方法可以做到这一点,尽管它们都不像我想要的那样优雅。通过一次调用一条记录调用 num_miss() 来调用一次一条记录的答案,或者(我的偏好)使用布尔比较函数,然后沿选择的轴使用总运算符:
zender@aerosol:~$ ncap2 -O -s 'tmp=three_dmn_var_dbl;mss_val=tmp.get_miss();tmp.delete_miss();tmp_bool=(tmp==mss_val);tmp_bool_ttl=tmp_bool.ttl($lon,$lat);print(tmp_bool_ttl);' ~/nco/data/in.nc ~/foo.nc
tmp_bool_ttl[0]=0
tmp_bool_ttl[1]=0
tmp_bool_ttl[2]=0
tmp_bool_ttl[3]=8
tmp_bool_ttl[4]=0
tmp_bool_ttl[5]=0
tmp_bool_ttl[6]=0
tmp_bool_ttl[7]=1
tmp_bool_ttl[8]=0
tmp_bool_ttl[9]=2
或者
zender@aerosol:~$ ncap2 -O -s 'for(rec=0;rec<time.size();rec++){nmiss=three_dmn_var_int(rec,:,:).number_miss();print(nmiss);}' ~/nco/data/in.nc ~/foo.nc
nmiss = 0
nmiss = 0
nmiss = 8
nmiss = 0
nmiss = 0
nmiss = 1
nmiss = 0
nmiss = 2
nmiss = 1
nmiss = 2