HDF5 与 NetCDF 经常一起出现,因为 NetCDF-4 使用 HDF5 容器存储数据。但它们不是同一种格式。HDF5 是通用的层级存储系统;NetCDF 在其上提供更受约束的科学数据模型与约定,让不同领域工具更容易交换变量。
简短结论
| HDF5 | NetCDF | |
|---|---|---|
| 主要目标 | 通用层级科学数据存储 | 可移植的数组型科学数据 |
| 结构 | 任意 group 与 dataset | 维度、变量、坐标与属性 |
| 常见扩展名 | .h5、.hdf5、.he5 | .nc、.nc4、.cdf |
| 约定 | 由应用自行定义 | 气候与地学常用 CF 约定 |
| 主要 API | libhdf5、h5py | netCDF-C、netCDF4-python、xarray |
| 两者关系 | NetCDF-4 使用的存储层 | 更高层数据模型;NetCDF-4 基于 HDF5 |
HDF5 是灵活的层级结构
HDF5 文件很像文件系统。group 可以包含更多 group、dataset、链接与属性。dataset 的命名和布局由应用自行定义。这种灵活性适合仪器数据、仿真检查点、显微图像、NeXus 与自定义数据产品。
代价是语义不统一。形状为 [12, 37, 721, 1440] 的 dataset 并不会天然说明每个轴分别是时间、气压、纬度还是经度。生产者需要通过属性、维度标尺或外部约定表达这些含义。
需要直接检查层级时,可以使用 HDF5 查看器。
NetCDF 提供科学数据模型
NetCDF 围绕命名维度、坐标变量、数据变量和属性组织数据。在气候与地球科学中,CF 约定进一步标准化单位、坐标轴、缺失值与网格映射等元数据。
这种更强的数据模型让应用无需了解生产仪器,也能理解 temperature(time, level, lat, lon) 这样的变量。NetCDF 查看器 会直接展示这些维度与变量。
NetCDF-4 位于哪里?
需要区分两类存储:
- NetCDF-3 classic 与 64-bit-offset 文件使用原始 NetCDF 二进制布局,并不是 HDF5。
- NetCDF-4 文件底层使用 HDF5,并增加 NetCDF 规则与元数据。
HDF5 库可以打开 NetCDF-4 容器,但看到的是原始 group、dataset、属性与内部元数据。理解 NetCDF 的库会重建预期的维度与变量。反过来,任意 HDF5 文件也可能使用 NetCDF 数据模型无法表达的结构。
应该选择哪一种?
重视互操作性时选择 NetCDF:气候模式、海洋数据、再分析资料,以及 xarray、Panoply、CDO、NCO 或 GIS 软件都受益于一致维度和 CF 元数据。
需要应用专属层级、混合 dataset、自定义链接,或者所在领域标准本身基于 HDF5 时,选择 HDF5。
转换时不要盲目展平整个容器。先检查结构,选择一个数值 dataset 或变量,再用 HDF5 转 CSV、HDF5 转 JSON 或 NetCDF 转 CSV 导出相关切片。
常见问题
可以把 HDF5 文件直接改名为 .nc 吗?
不可以。修改扩展名不会增加 NetCDF 数据模型或必需元数据。即使底层都使用 HDF5 库,NetCDF 工具仍可能拒绝通用 HDF5 文件。
HDFView 能打开 NetCDF-4 吗?
通常可以,因为它的存储容器是 HDF5。但 HDFView 展示的是底层层级,而理解 NetCDF 的查看器会提供更清晰的变量模型。
NetCDF-3 已经过时了吗?
没有。NetCDF-3 依然简单、可移植且广泛支持。它缺少 HDF5 压缩和 group 等 NetCDF-4 特性,但在生产科学工作流中仍很常见。

