我有一个xarray数据集:
ds
<xarray.Dataset>
Dimensions: (lat: 360, lon: 720, time: 3652)
Coordinates:
* lon (lon) float32 -179.75 -179.25 -178.75 -178.25 -177.75 -177.25 ...
* lat (lat) float32 89.75 89.25 88.75 88.25 87.75 87.25 86.75 86.25 ...
* time (time) datetime64[ns] 2010-01-01 2010-01-02 2010-01-03 ...
Data variables:
dis (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan...
dis变量中有nan,但整个数组不是nan。 维度时间的长度对应于10年的每日数据(3652天)。在
我要做的是得到10年时间序列的月平均值,每个月和每个gridsquare(lat,lon)。 输出数据集:
^{2}$我看到的一个几乎可以实现我想要的选择是:
ds.dis.groupby('time.month').mean()
然而,它的输出只是一个12项数组。i、 我们失去了纬度和经度。在
<xarray.DataArray 'dis' (month: 12)>
array([ 368.26764123, 394.0543304 , 424.67056092, 476.94943773,
522.383195 , 516.37355647, 497.74700652, 472.46993274,
456.87268206, 402.44729131, 367.41928436, 362.6121917 ])
Coordinates:
* month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
我想使用datetime64方法可能有一些简单的方法来实现这一点,但我一直在努力理解它们。在
唉,在写这篇文章时,我做到了:
stacked = xr.concat([ds.dis[tlist[month,:],:,:].mean(dim='time',skipna=True) for month in range(0,12)],dim='month')
它给出了:
<xarray.DataArray 'dis' (month: 12, lat: 360, lon: 720)>
然而,有没有其他更符合使用groupby的python方式呢?在
谢谢
为了避免聚合每个子数组中的所有维度,需要显式提供维度列表:
(有一次,我们曾考虑将此作为groupby操作的默认行为,因为这通常是我们想要的,但是现在还不清楚如何触发所有维度求和的默认值。)
相关问题 更多 >
编程相关推荐