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