张芷铭的个人博客

HDF5 是处理大规模科学数据的行业标准,提供分层结构、高效压缩和部分 I/O 能力。

核心优势

特性说明
分层结构类似文件系统的树形组织
高效压缩gzip、lzf、blosc 等算法
跨平台Windows/Linux/macOS 无缝共享
高性能 I/O部分读取、分块存储
自描述性内含元数据,便于长期保存

文件结构

1
2
3
4
5
/(根组)
├── group1/
│   ├── dataset1(多维数组)
│   └── attribute1(元数据)
└── dataset2
组件说明
File最高层次,自包含
Group组织容器,类似文件夹
Dataset多维数组,存储实际数据
Attribute小型元数据

Python 实战

基础操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import h5py
import numpy as np

# 创建文件
with h5py.File('data.h5', 'w') as f:
    dataset = f.create_dataset('matrix', data=np.random.random((100, 100)))
    dataset.attrs['description'] = '随机矩阵'

# 读取文件
with h5py.File('data.h5', 'r') as f:
    print(f['matrix'].shape)
    print(f['matrix'].attrs['description'])

压缩与分块

1
2
3
4
5
6
with h5py.File('compressed.h5', 'w') as f:
    f.create_dataset('large',
        data=np.random.random((1000, 1000, 10)),
        compression='gzip',
        compression_opts=9,
        chunks=(100, 100, 1))

部分 I/O

1
2
3
4
5
6
with h5py.File('data.h5', 'r') as f:
    subset = f['matrix'][100:200, 300:400]  # 只读取子区域

    # 逐块处理
    for i in range(0, f['matrix'].shape[0], 100):
        chunk = f['matrix'][i:i+100, :]

性能优化

策略说明
分块大小顺序访问用大分块,随机访问用小分块
压缩算法gzip 压缩率高,lzf 速度快
字节洗牌shuffle=True 对有序数据更有效

应用场景

  • 科学计算:物理模拟、气候建模
  • 机器学习:大规模数据集存储
  • 医疗影像:CT/MRI 数据归档
  • 金融分析:高频交易数据

Comments