将netCDF数据汇总为平均值,最小值,最大值

时间:2020-03-16 10:01:56

标签: python dask netcdf python-xarray

我有几个here可以下载的Coperinucs文件,这些文件是由documentation创建的。有四个文件,每个文件大约1GB。

我这样读取文件

netCDF

哪个给我

import xarray as xr

dset = xr.open_dataset("~/.../ERA5land1.nc")

根据showing branch name

计算平均值应该是直截了当的
<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...

这将导致计算机死机并最终崩溃。尝试 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=()> minmax并将其存储在具有相同规格的新mean文件中。

1 个答案:

答案 0 :(得分:1)

可以使用我的软件包nctoolkit(可通过pip:https://pypi.org/project/nctoolkit/,用户指南:https://nctoolkit.readthedocs.io/en/latest/installing.html获得)解决此问题。

这使用CDO作为后端,因此应该能够轻松处理您的数据。

所需的代码与您提供的代码非常相似。

import nctoolkit as nc
dset = xr.open_dataset("~/.../ERA5land1.nc")
mean = dset.mean()

如果您随后想要一个xarray数组,请执行以下操作:

mean.to_xarray()