计算多个 xarray 变量的平均值

问题描述 投票:0回答:3

我有一个 xarray 数据数组,例如:

<xarray.Dataset>
Dimensions:     (lat: 180, lon: 360, time: 360)
Coordinates:
  * time        (time) datetime64[ns] 1990-01-01 1990-02-01 ... 2020-01-01
  * lat         (lat) float64 -89.5 -88.5 -87.5 -86.5 ... 87.5 88.5 89.5
  * lon         (lon) float64 0 1 2 3 ... 357 358 359
Data variables:
    a    (time, lat, lon) float32 dask.array<shape=(360, 180, 360), chunksize=(360, 180, 360)>
    b    (time, lat, lon) float32 dask.array<shape=(360, 180, 360), chunksize=(360, 180, 360)>
    c    (time, lat, lon) float32 dask.array<shape=(360, 180, 360), chunksize=(360, 180, 360)>
    d    (time, lat, lon) float32 dask.array<shape=(360, 180, 360), chunksize=(360, 180, 360)>

如何将

a, b, c, d
的平均值计算为新变量
e

我知道

dataset.mean()
适用于坐标尺寸,对吗?例如随着时间的推移、纬度或经度,但我如何计算变量本身的平均值?在网上找不到太多关于此的信息。

非常感谢!

python mean python-xarray
3个回答
4
投票

您可以将其转换为数组,然后计算新维度的平均值:

mean = ds.to_array(dim='new').mean('new')
ds.assign(e=mean)

0
投票

我牢记马克西米利安的好解决方案。
不知道这个解决方案,我使用了 numpy + 列表理解:

np_mean = np.ma.mean( [ ds[var].values for var in ds.data_vars ], axis=0 )
ds.assign(mean = np_mean)

0
投票

我自己总是忘记这个方法:

ds['e'] = (ds.a + ds.b + ds.c + ds.d) / 4
© www.soinside.com 2019 - 2024. All rights reserved.