【问题标题】:using a mask with a single timeslice to mask another variable with multiple timesteps?使用具有单个时间片的掩码来掩盖具有多个时间步长的另一个变量?
【发布时间】:2018-10-28 11:28:23
【问题描述】:

我需要使用 mask.nc 中的 landsea 掩码将变量掩码到 var.nc 文件中

我使用 NCO 如下:

ncks -h -A -v mask_var mask.nc var.nc
ncap2 -h -s 'where(mask_var!=1) var_to_mask= var_to_mask@_FillValue' IN.nc OUT.nc

问题在于定义变量的时间步数。特别是,

mask_var(t,y,x) with t=1
var_to_mask(t,y,x,) with t=12

因此,第一个命令正确复制了 t=1 的 mask_var;对于 t>1 mask_var 是 NaN。

有没有办法为所有其他时间步复制 mask_var?

谢谢

【问题讨论】:

    标签: netcdf nco cdo-climate


    【解决方案1】:

    在 NCO 的ncap2 中,where() 条件中变量的排名必须与子句中变量的排名匹配。我认为这解释了你看到的行为,我认为你可以通过首先创建一个与变量相同等级的掩码然后使用该掩码来解决这个问题:

    ncks -h -A -v mask_var mask.nc var.nc
    ncap2 -h -s 'big_mask_var=0*var_to_mask+mask_var;where(big_mask_var!=1) var_to_mask= var_to_mask@_FillValue' IN.nc OUT.nc
    

    注意:big_mask_var 可以创建为不会出现在 OUT.nc 中的 RAM 变量。练习留给读者。

    【讨论】:

      【解决方案2】:

      我不太擅长 NCO,但我认为您也可以在 CDO 中轻松做到这一点,并会在此基础上冒险提出替代答案。你没有在你的问题中清楚地说明掩码到底是什么以及你想如何掩码,但是从你的代码中我推断出

      • 掩码文件有一个介于 0 和 1 之间的浮动变量
      • 您只想保留 mask=1 的变量值,并将其他所有内容设置为缺失(而不是零)?

      如果是这种情况,那么你可以这样做:

      cdo setrtomiss,-999,0.999 mask.nc maskmiss.nc
      cdo mul maskmiss.nc var.nc varmasked.nc
      

      第一行设置一个缺少 0.999 及以下的掩码,否则保持该值不变,第二行相乘。如果一个文件只有一个时间步长,CDO 通过重复自动“填充”丢失的时间段,从而解决您的问题。如果您担心四舍五入(或者您的掩码的值 > 1),那么更安全的掩码定义将是

      cdo gec,1 mask.nc mask2.nc
      cdo setctomiss,0 mask2.nc mask3.nc  
      

      在这种情况下,如果原始值 >=1,则 mask2 包含 1,否则为 0,然后在第二步中映射到缺失。

      我认为您可以在一个命令中传输整个内容,并以这种方式避免中间文件:

      cdo mul -setctomiss,0 -gec,1 mask.nc var.nc varmasked.nc 
      

      最后一件事作为脚注,以防万一,使用内置地形数据集在 CDO 中动态创建海陆掩码也很容易,根据我在此处的回答:NetCDF: How to mask/filter out non-land values in global dataset, preferably using Python and/or NCO?这可能非常有用,因为您有时没有相同分辨率的掩码数据集,它可以帮助您准确地重新映射较粗的比例掩码。

      【讨论】:

        猜你喜欢
        • 2017-07-10
        • 1970-01-01
        • 2022-12-09
        • 2021-04-12
        • 2022-11-10
        • 2022-06-10
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多