您的问题比较广泛,但我会尽力消除一些谬论以帮助您入门。我只有Python方面的经验,因此我的例子只涉及使用Python处理HDF5。
Pandas或PyTables可以访问HDF5文件,但我认为它们不允许存储纯NumPy数组。
您是正确的,PyTables不允许您保存没有任何额外开销的纯NumPy数组。但您不需要使用PyTables。
h5py
提供了一种类似于NumPy的接口来存储和访问HDF5文件中/从数组中。
存储一个NumPy数组
import h5py, numpy as np
arr = np.random.randint(0, 10, (1000, 1000))
f = h5py.File('file.h5', 'w', libver='latest')
dset = f.create_dataset('array', shape=(1000, 1000), data=arr, chunks=(100, 100)
compression='gzip', compression_opts=9)
有压缩和分块选项可供探索,以优化读写性能和压缩比,根据您的需求。但请注意,
gzip
是所有 HDF5 安装中都带有的少数压缩过滤器之一。
将轴标签存储为属性。
属性类似于数据集,允许您存储各种数据,包括标量或数组。
dset.attrs['Description'] = 'Some text snippet'
dset.attrs['X-Labels'] = np.arange(1000)
dset.attrs['Y-Labels'] = np.arange(1000)
内部数据不以NumPy数组的形式存储,而是根据HDF5规范在数据类型敏感的连续内存块中存储。因此,您可以从任何HDF5 API读取这些文件。
值得注意的是,有特定的要求确保字符串可传输,请参阅h5py
文档中的Strings in HDF5了解更多详细信息。