如何基于xarray月度均值掩码数组计算生物度日指数所需年度总和
解决方案
问题原因
你调用numpy的ma模块方法处理xarray的DataArray对象后,返回的是numpy masked array类型,丢失了xarray对象的元数据和内置方法,所以无法再调用resample等xarray专属方法。
正确实现方式
直接使用xarray内置的.where()方法完成区间过滤,全程保留xarray对象结构,符合Python生态的通用实现逻辑:
import xarray as xr import numpy as np # 1. 定义温度阈值(单位:开尔文,和TG数据集单位对齐) low_thresh = 7 + 273.15 high_thresh = 33 + 273.15 # 2. 计算月度均值(和原有逻辑一致) monmean = ds.TG.resample({"time":"1MS"}).mean() # 3. 区间过滤:区间外值设为NaN,自动保留DataArray完整结构 masked_monmean = monmean.where((monmean >= low_thresh) & (monmean <= high_thresh)) # 4. 年度重采样求和,xarray的sum方法默认自动忽略NaN ymonmeansum = masked_monmean.resample({'time':'YS'}).sum()
可选优化
如果后续需要兼容numpy masked array相关操作,同时保留xarray结构,可以在过滤后按需调用.to_masked_array()方法,需要调用xarray方法时直接操作原masked_monmean对象即可。
内容的提问来源于stack exchange,提问作者FlipAD
相关产品推荐
相关产品推荐

