h5py:压缩管道中的复合数据类型和比例偏移

h5py: Compound datatypes and scale-offset in the compression pipeline

使用 Numpy 和 h5py,可以创建“复合数据类型”数据集以存储在 hdf5 文件中:

import h5py
import numpy as np
#
# Create a new file using default properties.
#
file = h5py.File('compound.h5','w')
#
# Create a dataset under the Root group.
#
comp_type = np.dtype([('fieldA', 'i4'), ('fieldB', 'f4')])
dataset = file.create_dataset("comp", (4,), comp_type)

也可以在“压缩管道”中使用各种压缩过滤器,其中包括“比例偏移”过滤器:

cmpr_dataset = file.create_dataset("cmpr", (4,), 'i4', scaleoffset=0)

但是,我不清楚是否以及如何为化合物的不同字段指定具有特定参数的比例偏移过滤器(例如,上例中的 0)数据类型。

更一般地说,我不清楚是否以及如何使用特定于字段的参数来应用任何过滤器。

所以,问题是:

我的猜测(恐惧)是复合数据存储方式的性质(在一个“列”中,而不是每个字段在其自己的“列”中)将禁止应用此类特定于字段的过滤器,但是我想检查一下,只是为了确定。

除了 h5py 文档外,请查看 hdf5 文档。他们进行了更详细的介绍。如果底层文件系统不支持这个,那么 numpy 接口也不支持。

https://support.hdfgroup.org/HDF5/doc/UG/OldHtmlSource/10_Datasets.html#ScaleOffset

在其他地方它说过滤器应用于整个块。

定义复合类型的表达式是纯表达式numpyh5py 必须将其描述符翻译成等效的 hdf5 c-struc 描述。有示例 c 和 fortran 复合类型定义。

所有文档都说此 offset 仅适用于整数和浮点类型。那可以理解为排除string、vlen、compound。您所希望的是它仍然可以与复合类型中的数字类型一起使用。我不这么认为。