【发布时间】:2023-04-03 08:13:01
【问题描述】:
我有几个netCDF 文件可以下载here,由Coperinucs 创建。一共有四个文件,每个文件大约1GB。
我是这样读文件的
import xarray as xr
dset = xr.open_dataset("~/.../ERA5land1.nc")
这给了我
<xarray.Dataset>
Dimensions: (latitude: 61, longitude: 101, time: 87647)
Coordinates:
* latitude (latitude) float32 31.0 30.9 30.8 30.7 ... 25.3 25.2 25.1 25.0
* longitude (longitude) float32 79.0 79.1 79.2 79.3 ... 88.7 88.8 88.9 89.0
* time (time) datetime64[ns] 1981-01-01T01:00:00 ... 1990-12-31T23:00:00
Data variables:
t2m (time, latitude, longitude) float32 dask.array<shape=(87647, 61, 101), chunksize=(10, 61, 101)>
Attributes:
Conventions: CF-1.6
history: 2020-03-10 16:47:13 GMT by grib_to_netcdf-2.16.0: /opt/ecmw...
根据documentation 计算平均值应该是直截了当的
mean = dset.mean()
这会导致计算机死机并最终崩溃。尝试chunk 数据也不起作用。
dset = xr.open_dataset("~/.../ERA5land1.nc", chunks = {'time': 10})
mean = dset.mean()
这不会崩溃,但我明白了
<xarray.Dataset>
Dimensions: ()
Data variables:
t2m float32 dask.array<shape=(), chunksize=()>
我想知道如何计算每个网格单元的min、max 和mean,并将其存储在具有相同规格的新netCDF 文件中。
【问题讨论】:
-
如果您试图获得每个网格单元的平均值,您需要指定要计算的维度。试试
mean = dset.mean(dim='time')或mean = dset['t2m'].mean(dim='time')
标签: python dask netcdf python-xarray