如何匹配xarray编码中的所有变量(blosc、zarr压缩)
How to match all variables in xarray encoding (blosc, zarr compression)
如何使用zarr压缩的例子有如下代码示例see xarray doc:
In [42]: import zarr
In [43]: compressor = zarr.Blosc(cname="zstd", clevel=3, shuffle=2)
In [44]: ds.to_zarr("foo.zarr", encoding={"foo": {"compressor": compressor}})
Out[44]: <xarray.backends.zarr.ZarrStore at 0x7f383eeba970>
编码映射表示将给定的压缩器应用于“foo”变量。但是如果我想应用到我所有的变量,不管它们是如何命名的怎么办。我是否必须显式创建编码字典以匹配 Dataset/array 中的所有变量,或者是否存在某种通配符模式?我只想用同一个压缩器压缩整个数据集。
如果你想为你的所有变量设置相同的编码,你可以通过简单的理解来做到这一点。当您遍历数据集时,它将 return 变量名称。
示例:
import xarray as xr
import zarr
# test dataset
ds = xr.tutorial.open_dataset("tiny")
# add second variable
ds['tiny2'] = ds.tiny*2
compressor = zarr.Blosc(cname="zstd", clevel=3, shuffle=2)
# encodings
enc = {x: {"compressor": compressor} for x in ds}
# check
print(enc)
# {'tiny': {'compressor': Blosc(cname='zstd', clevel=3, shuffle=BITSHUFFLE, blocksize=0)}, 'tiny2': {'compressor': Blosc(cname='zstd', clevel=3, shuffle=BITSHUFFLE, blocksize=0)}}
# x is the variable name
ds.to_zarr("foo.zarr", encoding=enc})
如何使用zarr压缩的例子有如下代码示例see xarray doc:
In [42]: import zarr
In [43]: compressor = zarr.Blosc(cname="zstd", clevel=3, shuffle=2)
In [44]: ds.to_zarr("foo.zarr", encoding={"foo": {"compressor": compressor}})
Out[44]: <xarray.backends.zarr.ZarrStore at 0x7f383eeba970>
编码映射表示将给定的压缩器应用于“foo”变量。但是如果我想应用到我所有的变量,不管它们是如何命名的怎么办。我是否必须显式创建编码字典以匹配 Dataset/array 中的所有变量,或者是否存在某种通配符模式?我只想用同一个压缩器压缩整个数据集。
如果你想为你的所有变量设置相同的编码,你可以通过简单的理解来做到这一点。当您遍历数据集时,它将 return 变量名称。
示例:
import xarray as xr
import zarr
# test dataset
ds = xr.tutorial.open_dataset("tiny")
# add second variable
ds['tiny2'] = ds.tiny*2
compressor = zarr.Blosc(cname="zstd", clevel=3, shuffle=2)
# encodings
enc = {x: {"compressor": compressor} for x in ds}
# check
print(enc)
# {'tiny': {'compressor': Blosc(cname='zstd', clevel=3, shuffle=BITSHUFFLE, blocksize=0)}, 'tiny2': {'compressor': Blosc(cname='zstd', clevel=3, shuffle=BITSHUFFLE, blocksize=0)}}
# x is the variable name
ds.to_zarr("foo.zarr", encoding=enc})