如何扩展 h5py 以便我可以访问 hdf5 文件中的数据?

Posted

技术标签:

【中文标题】如何扩展 h5py 以便我可以访问 hdf5 文件中的数据?【英文标题】:How to extend h5py so that I can access data within a hdf5 file? 【发布时间】:2011-07-20 18:52:05 【问题描述】:

我有一个小的 python 程序,它使用 h5py 模块创建一个 hdf5 文件。我想编写一个 python 模块来处理 hdf5 文件中的数据。我怎么能这样做?

更具体地说,我可以将 numpy 数组设置为 PyArrayObject 并使用 PyArg_ParseTuple 读取它们。这样,我可以在编写 python 模块时从 numpy 数组中读取元素。如何读取 hdf5 文件以便我可以访问单个元素?

更新:感谢以下答案。我需要从 C 而不是从 Python 读取 hdf5 文件-我知道该怎么做。例如:

import h5py as t
import numpy as np
f=t.File('\tmp\tmp.h5', 'w')
#this file is 2+GB
ofmat=np.load('offsetmatrix.npy')
f['FileDataset']=ofmat
f.close()

现在我有一个名为 '\tmp\tmp.h5' 的 hdf5 文件。我需要做的是使用 C(而不是 python)从 hdf5 文件中读取单个数组元素,以便我可以对这些元素做一些事情。 This 展示了如何扩展 numpy 数组。 hdf5如何扩展?

编辑:语法

【问题讨论】:

如果你使用的是“PyArrayObject”,听起来你使用的是C接口……你写的是C还是python? 如果你真的想从 C 代码中读取 HDF5 文件,为什么不使用 HDF5 C 库呢?这将比使用旨在从 Python 代码中使用的库要容易得多。 谢谢斯文,这就是我想做的。但我想写一个python模块。这个模块会做一些复杂的计算(在 C 中更快),然后将结果返回给 python 脚本。 您可能想考虑使用cython 并调用低级HDF5 C 函数来访问数据。或者,将数据块拉入 numpy 数组,然后使用 cython 或编写 python 扩展对 numpy 数组进行计算:scipy.org/Cookbook/C_Extensions/NumPy_arrays JoshAdel,我使用 [this HDFF C function] (hdfgroup.org/HDF5/doc/RM/RM_H5F.html#File-Open) 直接打开 hdf5 文件并进行计算 - 然后我将其发送回 python。谢谢。 【参考方案1】:

h5py 为您提供了一个直接接口,用于读取/写入和操作存储在 hdf5 文件中的数据。你看过文档吗?

http://docs.h5py.org/

我建议从这些开始。这些有如何进行简单数据访问的非常清晰的示例。如果 h5py 中的方法未涵盖您正在尝试做的特定事情,您能否更具体地描述您想要的用法?

【讨论】:

【参考方案2】:

如果您实际上并不需要 HDF5 的特定结构,但只需要速度和跨平台兼容性,我建议您查看PyTables。它具有读取和写入 Numpy 数组的内置能力。

【讨论】:

@Josh:我不知道。谢谢你告诉我。

以上是关于如何扩展 h5py 以便我可以访问 hdf5 文件中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 和 h5py 读取 HDF5 属性(元数据)

如何区分 HDF5 数据集和使用 h5py 的组?

使用 h5py 删除 hdf5 数据集

如何使用 h5py 读取只有数据集(无组)的 HDF5 文件?

hdf5 / h5py ImportError: libhdf5.so.7

判断使用 h5py 创建的 HDF5 文件是不是被压缩