当前位置: 首页 > news >正文

h5py 常用API

h5py 是一个强大的 Python 库,用于与 HDF5 文件进行交互。HDF5(Hierarchical Data Format)是一种用于存储和组织大规模科学数据的文件格式。h5py 允许用户创建、读取和修改 HDF5 文件中的数据集和元数据。

下面是 h5py 库的一些常见 API 和操作示例:

1. 导入 h5py

import h5py

2. 创建 HDF5 文件

你可以使用 h5py.File() 函数来创建或打开 HDF5 文件,并指定模式:

  • 'w':写入模式,创建新文件或覆盖现有文件。
  • 'r':只读模式,打开现有文件。
  • 'a':追加模式,打开文件用于读写,如果文件不存在则创建它。
# 创建一个新的 HDF5 文件
with h5py.File('example.h5', 'w') as f:pass  # 文件创建成功后可以在此处添加数据

3. 创建数据集

数据集(Dataset)是 HDF5 文件中的主要数据存储结构,类似于 NumPy 数组。可以使用 create_dataset() 方法创建一个新的数据集。

import numpy as npwith h5py.File('example.h5', 'w') as f:# 创建一个形状为 (100, 100) 的数据集,数据类型为浮点数dset = f.create_dataset('my_data', (100, 100), dtype='f4')# 也可以从现有的 NumPy 数组创建数据集data = np.arange(100).reshape(10, 10)f.create_dataset('array_data', data=data)

4. 读取数据集

通过 h5py.File() 打开文件后,可以像字典一样访问文件中的数据集,并使用 [:] 操作符读取数据。

with h5py.File('example.h5', 'r') as f:# 获取数据集对象dset = f['my_data']# 读取数据data = dset[:]  # 读取整个数据集print(data.shape)

5. 创建和读取压缩数据集

HDF5 支持数据压缩,h5py 通过 compression 参数启用压缩。常用的压缩方法是 gzip

with h5py.File('compressed.h5', 'w') as f:# 创建一个使用 gzip 压缩的数据集dset = f.create_dataset('compressed_data', (1000, 1000), compression="gzip", compression_opts=9)# 写入随机数据dset[:, :] = np.random.random((1000, 1000))

在读取压缩数据时不需要额外的操作,h5py 会自动解压缩。

with h5py.File('compressed.h5', 'r') as f:# 读取压缩数据集data = f['compressed_data'][:]print(data.shape)

6. 数据集切片与访问

类似于 NumPy 数组,HDF5 数据集可以进行切片操作,只读取数据集的一部分,而不需要将整个数据集加载到内存中。

with h5py.File('example.h5', 'r') as f:# 只读取数据集的一部分partial_data = f['my_data'][10:20, 10:20]print(partial_data)

7. 创建分块(Chunked)数据集

分块数据集允许按块存储数据,这样可以优化大规模数据集的存储和读取性能。通过设置 chunks 参数来启用分块。

with h5py.File('chunked_data.h5', 'w') as f:# 创建分块数据集,每块的大小为 (100, 100)dset = f.create_dataset('chunked_data', (1000, 1000), chunks=(100, 100))# 写入数据dset[:, :] = np.random.random((1000, 1000))

8. 管理元数据(Attributes)

每个数据集和文件对象都可以存储 属性(Attributes),这些属性是附加的元数据。你可以通过字典的方式来读写属性。

with h5py.File('example.h5', 'w') as f:# 创建一个数据集dset = f.create_dataset('my_data', (100, 100))# 设置属性dset.attrs['description'] = 'This is a dataset of random numbers'dset.attrs['units'] = 'arbitrary'# 读取属性description = dset.attrs['description']units = dset.attrs['units']print(description, units)

9. 创建和读取组(Groups)

组(Groups)是 HDF5 文件中的容器,用于组织数据集。你可以将组看作是类似文件系统中的文件夹,数据集就是文件。

with h5py.File('group_example.h5', 'w') as f:# 创建一个组group = f.create_group('experiment_1')# 在组内创建数据集group.create_dataset('temperature', (100,))group.create_dataset('pressure', (100,))# 访问组内数据集temp_data = f['experiment_1/temperature'][:]

10. 遍历 HDF5 文件

可以遍历 HDF5 文件中的所有组和数据集。visit()visititems() 方法可以帮助遍历整个文件。

with h5py.File('group_example.h5', 'r') as f:# 访问所有的数据集名称def print_name(name):print(name)f.visit(print_name)  # 递归访问所有节点(组和数据集)# 访问数据集的详细信息def print_name_and_type(name, obj):print(name, type(obj))f.visititems(print_name_and_type)  # 访问组和数据集,并显示类型

11. 删除数据集和组

可以使用 Python 的 del 操作符来删除数据集或组。

with h5py.File('example.h5', 'a') as f:# 删除数据集del f['my_data']

12. 文件模式

在处理 HDF5 文件时,h5py.File() 可以接收不同的模式参数:

  • 'r':只读模式,不能修改文件。
  • 'r+':读写模式,打开文件并进行修改。
  • 'w':写入模式,覆盖现有文件。
  • 'w-''x'

:创建模式,创建一个新文件,如果文件已存在则引发错误。

  • 'a':追加模式,文件存在时打开,文件不存在时创建。

示例:

# 打开文件以追加模式
with h5py.File('example.h5', 'a') as f:# 如果存在新数据,可以继续添加数据集或修改已有数据new_dset = f.create_dataset('new_data', (50, 50), dtype='f4')new_dset[:, :] = np.random.random((50, 50))

总结

h5py 是一个非常强大的库,允许你与 HDF5 格式的数据文件进行灵活的交互。通过掌握创建文件、数据集、压缩、分块、元数据管理以及组的组织结构等常用操作,可以高效地处理大规模科学数据。


http://www.mrgr.cn/news/30769.html

相关文章:

  • 【动态规划】两个数组的 dp 问题一
  • 软考高级:数据库规范化: 1NF、2NF、3NF和 BCNF AI 解读
  • Google Gemini 与 OpenAI 激烈竞赛:语音 AI 与未来智能体的技术演进
  • 基于Tesseract_OCR识别
  • 透明LED模块的应用场景
  • 简单题70.爬楼梯 (Java)2024920
  • Axure PR 9 步进器 设计交互
  • 国际知名度最高的华人改名大师颜廷利:当代最牛的易经姓名学泰斗
  • Spring 的循环依赖
  • .NET 一直跻身 30 大Github最活跃开源项目之列。
  • 【每天学点AI】一个例子带你了解Python装饰器到底在干嘛!
  • MySQL_简介及安装、配置、卸载(超详细)
  • pig4cloud中RequestMatcher的添加
  • Python知识点:详细讲解在Python编程中,GIL(全局解释器锁)的影响与规避方法
  • Vue子组件样式受到父组件污染
  • 计算机组成原理之计算机硬件的基本组成
  • 会计稳健性Cscore模型(2000-2022年)
  • 深入探索NumPy
  • 等保测评:企业如何构建安全的网络架构
  • LIN总线CAPL函数—— 设置与测量从节点的波特率(linSetRespBaudrate)