我目前正在处理每日气候数据 (ERA5),并正在使用 xarray 对其进行分析。da<xarray.DataArray (time: 8036)>dask.array<stack, shape=(8036,), dtype=float32, chunksize=(1,), chunktype=numpy.ndarray>Coordinates: * time (time) datetime64[ns] 1979-01-01 1979-01-02 ... 2000-12-31我想从时间序列的当地月平均值计算这些数据的每日异常值。也就是说,我想从 1979 年 1 月的所有日子中去掉(例如) 1979 年 1 月的平均值。我想在我的数组中每年的每个月都这样做。我认为目前没有一种简单的方法可以用 xarray 做到这一点,但我很感激人们能找到任何解决方法!:)
2 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
一个稍微漂亮的方法,它可以让您了解如何将事物扩展到其他类型的异常是:
da = da.assign_coords(year_month=da.time.dt.strftime("%Y-%m"))
result = da.groupby("year_month") - da.groupby("year_month").mean("time")
ITMISS
TA贡献1871条经验 获得超8个赞
好的,如果有人感兴趣,我想我已经找到了答案,不过我会暂时搁置这个问题,因为在我看来,这是一个非常丑陋的解决方案,如果有比我能拼凑出来的更好的解决方案,那就太好了一起!
da_cp = da.copy().load()
for year in ['1979', '1980', '1981', ..., '1998', '1999', '2000']:
for month in ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']:
da_cp.loc[f'{year}-{month}'] -= da_cp.loc[f'{year}-{month}'].mean('time')
我已经对此进行了数字测试,它给出了正确的答案,但目前它不是很灵活,我希望这也能扩展到“局部季节性异常”。
添加回答
举报
0/150
提交
取消