python - 如何从每月均值屏蔽数组计算每年的总和 xarray?
问题描述
我想计算高于 7 和低于 33 摄氏度的日平均温度的年总和。这是针对生物学相关学位天数指数的定制计算。我想在 python 中做这个计算,我想以一种 Python 的方式来做,意思是,使用 xarray 和 numpy 等众所周知的包中已经制作的函数。
我正在使用来自 CDS 的 TG 数据集。它采用 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 是一个 maskedarray 并且 xarray 函数resample
不再适用。
ymonmeansum = masked_monmean.data.resample({'time':'YS'}).sum()
AttributeError: 'numpy.ndarray' object has no attribute 'resample'
你知道我该如何解决这个问题吗?
解决方案
您可以使用where
之前的方法resample
:
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 值。
推荐阅读
- kotlin - Kotlin 编译器插件可以为语言添加什么样的语法?
- phaser-framework - 移相秒表
- c# - C#: Deconstruct(...) 是否在编译输出中生成额外的垃圾分配?
- python - is_array 函数 php 到 Python
- ruby - 如何使用 Sequel 运行 Postgres psql“斜线”命令
- r - 在闪亮仪表板标题上放置一个下拉按钮以选择主题
- circleci - CircleCI 保持步骤
- angular - 尝试对角度数据表进行排序,但单击排序时没有任何反应
- java - RabbitMQ Java 客户端通道在创建时关闭
- gradle - 自定义 gradle 插件抛出 Unable to load class 'io.github.classgraph.ClassGraph'