在写入to_netcdf时,为xarray数据集中的许多变量指定编码/压缩

dre*_*eab 5 python-xarray

我一直在写一些有多个变量的xarray.Datasets.目前,为了保持大小可管理,我指定了编码,例如zlib,但需要根据变量应用于变量(dataArray).

将相同的编码参数应用于所有变量的好方法是什么?例如

<xarray.Dataset>
Dimensions:  (lat: 1440, lon: 2880)
Coordinates:
  * lat      (lat) float64 -90.0 -89.88 -89.75 -89.62 -89.5 -89.38 -89.25 ...
  * lon      (lon) float64 -180.0 -179.9 -179.8 -179.6 -179.5 -179.4 -179.2 ...
Data variables:
a1     (lat, lon) float64 nan nan nan nan nan nan nan nan 0.0 ...
b     (lat, lon) float64 nan nan nan nan nan nan 0.0 0.0 0.0 ...
c     (lat, lon) float64 nan nan nan nan nan nan nan nan 0.0 ...
d      (lat, lon) float64 nan nan nan nan nan nan nan nan 0.0 ...
e      (lat, lon) float64 nan nan nan nan nan nan nan nan 0.0 ...
Run Code Online (Sandbox Code Playgroud)

在写出这个数据集时,我们会使用:

ds.to_netcdf(filename, encoding={'a1':{'zlib': True,'complevel': 5},'b':{'zlib': True,'complevel': 5},'c':{'zlib': True,'complevel': 5},'d':{'zlib': True,'complevel': 5},'e':{'zlib': True,'complevel': 5}})
Run Code Online (Sandbox Code Playgroud)

对于更多变量,这会变得很长.一种选择是在顺序附加的基础上将每个数据阵列写入netcdf,但是当数据集准备就绪时,这似乎也很复杂.

Tom*_*101 13

我只是动态创建编码参数:

comp = dict(zlib=True, complevel=5)
encoding = {var: comp for var in ds.data_vars}
ds.to_netcdf(filename, encoding=encoding)
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个解决方案,它产生了一个 ValueError:意外的 scipy 后端编码:['zlib','complevel']。通过安装netcdf4(pip install netcdf4)并指定engine='netcdf4'来解决。以防万一其他人也遇到同样的问题。 (3认同)