快速使用 HDF5 存储数据
遇到要把分散的训练集合(雷达数据、标签等)合在一个文件的的需求,然后看上了 HDF5 这种存储方式。
HDF5 还支持数据压缩,并且读取数据时会自动解压。
以下代码实例使用库 h5py。
import h5py
with h5py.File(output_file, 'w') as f:
all_radar_data = []
all_class_data = []
all_box_data = []
for file in common_files:
......
all_radar_data = np.array(all_radar_data)
all_class_data = np.array(all_class_data)
all_box_data = np.array(all_box_data)
f.create_dataset('raw_data', data=all_radar_data, compression='gzip', compression_opts=8)
f.create_dataset('class', data=all_class_data)
f.create_dataset('box', data=all_box_data)
关于压缩,compression='gzip', compression_opts=8 就启用了数据压缩。compression 设置为 gzip 就行,compression_opts 值越高压缩力度越大,最高至 9。实测 9 压缩慢到令人发指,读取速度则是各个压缩等级都一样。
文件的读取非常简单:
with h5py.File(file_name, 'r') as f:
raw_data = f['raw_data'][:]
实际用下来,使用 compression_opts=8 压缩率大概在 60%,压缩 800MB 的数据消耗 15 分钟。读取耗时 10s 以内。