微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用多个可能的值按月拟合 xarray.DataArray

如何解决使用多个可能的值按月拟合 xarray.DataArray

我想过滤 xarray DataArray 以仅保留月份属于某些 month_list 的数据。

假设我需要四月和六月,我的 month_list 将是 [4,6]
理想情况下,我想做:

da.where(da.time.dt.month in month_list,drop=True)

但这会引发错误(因为in):
ValueError:包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()

所以我想出了这个解决方案:

def month_resampler(da: DataArray):
        acc = []
        for gr,val in da.groupby(da.time.dt.month):
            if gr in month_list:
                acc.append(val)
        return xarray.concat(acc,"time")

但是在这里使用 groupby 感觉有点过分。特别是我不确定 groupby 在处理大型数据集时的性能如何。 我相信 selisel 会更好地过滤元素,但我找不到正确使用它们的方法

有什么想法吗?

解决方法

您可以使用 numpy.isin 过滤预定义的月份列表。

示例:


import xarray as xr
import numpy as np

x = xr.tutorial.load_dataset("air_temperature")

# desired months
mon_list = [2,3,4,8]

# before
print(np.unique(x.time.dt.month))

# [ 1  2  3  4  5  6  7  8  9 10 11 12]

xsel = x.sel(
    time=np.isin(x.time.dt.month,mon_list)
)

# after
print(np.unique(xsel.time.dt.month))

# [2 3 4 8]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。