如何从月均值屏蔽数组计算年总和 xarray?

How to calculate a yearly sum xarray from a monthly means masked array?

我想计算高于 7 摄氏度和低于 33 摄氏度的日平均温度的年度总和。这是针对生物学相关度日指数的定制计算。我想在 python 中进行此计算,并且我想以 pythonic 方式进行,这意味着,使用 xarray 和 numpy 等知名软件包中已经制作的函数。

我正在使用TG dataset from CDS。它采用 netCDF 格式,时间跨度为 1981 年至 2010 年。 我被困在做这个计算。我能够使用以下命令将数据集重新采样为每月平均值:

monmean = ds.TG.resample({"time":"1MS"}).mean()

现在我需要对日温度平均值的月平均值进行上述年度总和,但我找不到一种方法来避免添加那些超出我定义的时间间隔的值。我试过这样敷面膜:

masked_array = ma.masked_outside(monmean, 7+273.15, 33+273.15)
masked_monmean = np.ma.masked_where(np.ma.get_mask(masked_array), monmean)

但是接下来发生的事情是 masked_monmean 是一个掩码数组,xarray 函数 resample 不再适用。

ymonmeansum = masked_monmean.data.resample({'time':'YS'}).sum()

AttributeError: 'numpy.ndarray' object has no attribute 'resample'

你知道我该如何解决这个问题吗?

可以在resample之前使用where方法:

mask = ds['TG'].isel(time=0)
ds['TG'].where(7.<=ds['TG']).where(ds['TG']<=33.).resample(time='M').mean().where(mask)

where将不满足你的布尔方程的值设置为nan,均值排除nan值。