猿问

xarray:从*本地*每月平均值计算每日异常的时间序列

我目前正在处理每日气候数据 (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 做到这一点,但我很感激人们能找到任何解决方法!:)


守候你守候我
浏览 141回答 2
2回答

慕莱坞森

一个稍微漂亮的方法,它可以让您了解如何将事物扩展到其他类型的异常是:da = da.assign_coords(year_month=da.time.dt.strftime("%Y-%m"))result = da.groupby("year_month") - da.groupby("year_month").mean("time")

ITMISS

好的,如果有人感兴趣,我想我已经找到了答案,不过我会暂时搁置这个问题,因为在我看来,这是一个非常丑陋的解决方案,如果有比我能拼凑出来的更好的解决方案,那就太好了一起!da_cp = da.copy().load()for year in ['1979', '1980', '1981', ..., '1998', '1999', '2000']:&nbsp; &nbsp; for month in ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']:&nbsp; &nbsp; &nbsp; &nbsp; da_cp.loc[f'{year}-{month}'] -= da_cp.loc[f'{year}-{month}'].mean('time')我已经对此进行了数字测试,它给出了正确的答案,但目前它不是很灵活,我希望这也能扩展到“局部季节性异常”。
随时随地看视频慕课网APP

相关分类

Python
我要回答