如何通过恒定阈值对 netcdf 变量进行子集化

How to subset netcdf variable by a constant threshold

我有一个 netcdf 文件,其中包含 1990-2001 年期间在 1x1deg lat-lon 网格中每天时间步长的全球温度(tas,degC)数据。

我只对 tas days > 10degC 感兴趣。

有没有一种方法可以使用 CDO 对 netcdf 文件进行子集化,并创建一个只有 tas days > 10degC 的新文件?

gtc 运算符可能与我的问题有关,但它只创建一个包含 0 和 1 的掩码,而我需要真值 >10degC。

我不太确定你想要什么...如果你想将所有 T<10C 的值设置为缺失,那么你可以按如下方式进行:

cdo gtc,10 tas.nc mask1.nc 
# set zeros to missing 
cdo setctomiss,0 mask1.nc mask2.nc 
cdo mul tas.nc mask2.nc tas_masked.nc 

此技术与用于 land-sea 面具的技术相同 - 有关详细信息,请参阅我在 masking and creating a land sea mask 上的视频。

我同意 Adrian Tompkins 的观点,建议的工作流程并不过分明智,因为任何子集化都会丢弃网格信息,并从根本上否定首先使用 netCDF 数据的目的。使用 R 中的数据帧或 Python 中的 pandas 中的数据帧建议的工作流程更有意义。

但是,如果您必须在 CDO 中执行此操作,您可以使用 reducegrid 运算符,它将 netCDF 文件缩减为没有缺失值的网格单元,如下所示(改编自 Adrian Tompkins 的回答):

cdo gtc,10 tas.nc mask1.nc 
# set zeros to missing 
cdo setctomiss,0 mask1.nc mask2.nc 
cdo reducegrid,mask2.nc tas.nc tas_subsetted.nc