如何从逐日降水NetCDF文件提取指定经纬度范围月均值并输出新文件
处理方案
方法1:CDO命令行实现(无代码,效率最高)
直接在终端执行单条命令即可完成所有需求:cdo monmean -sellonlatbox,-118.25,-84.75,13.25,33.25 input_precip.nc output_monthly_precip.nc
参数说明:
-sellonlatbox为区域裁剪算子,四个参数按顺序对应西经度边界、东经度边界、南纬度边界、北纬度边界,完全匹配你需要的提取范围monmean为月平均计算算子,会自动识别时间维度的自然月份分组,逐网格计算月平均值,输出文件默认保留(lon,lat,time)的维度顺序,符合要求
如果原始文件时间维度无法被正确识别,可在命令最前面增加-setcalendar,standard参数校准时间配置。
方法2:Python xarray实现(灵活度高,适合后续自定义处理)
依赖安装
执行命令安装所需库:pip install xarray netcdf4
处理代码
import xarray as xr # 读取原始逐日降水NetCDF文件 ds = xr.open_dataset("your_daily_precip.nc") # 提取指定经纬度范围的子区域 # 若你的数据纬度为降序存储,将slice参数改为(33.25,13.25)即可 ds_region = ds.sel( lon=slice(-118.25, -84.75), lat=slice(13.25, 33.25) ) # 按自然月重采样计算月平均,输出保留(lon,lat,time)维度 ds_monthly = ds_region.resample(time="1ME").mean() # 导出结果为NetCDF文件 ds_monthly.to_netcdf("monthly_precip_output.nc")
逻辑说明
sel方法直接按照经纬度坐标值切片,不需要手动找索引位置resample(time="1ME")自动按日历月分组处理,不会混淆不同年份的相同月份,输出的time维度对应每个月的月末时间戳,维度结构和原始数据保持一致。
内容的提问来源于stack exchange,提问作者Adrian Torres
相关产品推荐
相关产品推荐

