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

时间:2016-11-24 10:51:15

标签: python numpy compression hdf5 h5py

使用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)。

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

所以,问题是:

  • 是否可以将过滤器应用于仅将数据类型数据集或特定参数复合到特定字段?

  • 如果是,那么如何在语法方面做到这一点?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

定义复合类型的表达式是纯numpyh5py必须将其描述符转换为等效的hdf5 c-struc描述。有样本c和fortran复合类型定义。

所有文档都说这个offset仅适用于整数和浮点类型。这可以理解为排除字符串,vlen和复合。您希望它仍然适用于复合类型中的数字类型。我不这么认为。