对比
NPZ 与 HDF5:数组打包与局部读取
NPZ 将带名称的 NPY 数组打包到 ZIP 中。HDF5 通过层级结构组织组、数据集和属性。
应该选择哪种格式?
用 NumPy 交换一组数组可选 NPZ;需要反复局部读取或层级管理时可考虑 HDF5。
适用于 NPZ
将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组
- 将多个数组保存在一个文件中
- 按需选择 ZIP 成员不压缩或压缩
适用于 HDF5
以层级结构存储大型科学和技术数据 · 在一个容器中保存多维数组及相关元数据
- 用组、数据集和属性组织复杂数据
- 需要局部读写或数据集级压缩的科学工作流
基本信息
| 项目 | NPZ | HDF5 |
|---|---|---|
| 扩展名 | .npz | .h5, .hdf5 |
| MIME 类型 | application/zip | |
| 常见用途 | 将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组 | 以层级结构存储大型科学和技术数据 · 在一个容器中保存多维数组及相关元数据 |
| 打开方式 | 使用NumPy `load`或支持NPZ的工具打开,检查数组名称并读取所需内容。使用后关闭返回的`NpzFile`;对于可能含object数组的陌生文件,检查pickle设置。 | 使用支持 HDF5 的可视化或分析软件、或程序库打开。检查组层级、数据集形状与类型、属性和筛选器。不同应用可能定义自己的 HDF5 约定,请同时查阅创建者文档。 |
| 导出或转换 | 用`savez`或`savez_compressed`保存多个数组。确认成员是未压缩还是DEFLATE,并与接收端核对数组名称、dtype和shape。转换后比较数组和值。 | 转换为 CSV、Parquet、FITS 等格式前,先确定如何映射层级、数组维度和类型、属性、单位与坐标。目标格式可能无法表达某些结构或元数据;请保留原文件并核对数据。 |
按用途选择
将多个数组保存在一个文件中
将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组
NPZ按需选择 ZIP 成员不压缩或压缩
将多个 NumPy 数组打包到一个 ZIP 归档 · 在基于 NumPy 的科学计算流程间传递命名数组
NPZ用组、数据集和属性组织复杂数据
以层级结构存储大型科学和技术数据 · 在一个容器中保存多维数组及相关元数据
HDF5需要局部读写或数据集级压缩的科学工作流
以层级结构存储大型科学和技术数据 · 在一个容器中保存多维数组及相关元数据
HDF5关键点 1
NPZ 按名称选择归档成员,每个成员对应一个数组。
进一步了解差异关键点 2
HDF5 支持选择数据集内部的区域。
进一步了解差异进一步了解差异
NPZ 按需加载成员;普通 numpy.load 并不直接读取压缩成员内部的任意切片。HDF5 不一定更快,应根据实际读取区域和分块形状测试。
- savez 不压缩,savez_compressed 使用 DEFLATE。HDF5 压缩取决于配置;对于分块数据集,即使只需要一个元素,也会涉及其所在的整个块。
- HDF5 属性可记录单位,但其含义需要约定。迁移时核对名称、dtype、shape、轴顺序、数值及所需过滤器。不要为不可信 NPZ 的 object 数组启用 pickle。
常见问题
转换为 HDF5 会自动保留 NPZ 数据的含义吗?
不能保证。应定义数组与组的映射、单位和缺失值约定,并验证转换后的数值。