HDF5到底是什么

HDF5到底是什么

《Python和HDF 5大数据应用》——1.2 HDF5到底是什么-阿里云开发者社区

1.2 HDF5到底是什么

HDF5是一种存储相同类型数值的大数组的机制,适用于可被层次性组织且数据集需要被元数据标记的数据模型。

它跟SQL风格的关系型数据库区别相当大,HDF5在组织结构方面有一些特殊的技巧(第8章中有一个例子)。如果你需要在多个表上保持关系,或者想要在数据上进行JOIN,那么一个关系型数据库可能更适合你。又或者你需要在一台没有安装HDF5的机器上读取一个小型的1维数据集,那么CSV这样的文本格式是更合理的选择。

但如果你需要处理多维数组,对性能有非常高的要求,需要在数据集上支持子集分片和部分I/O,需要用特征来给数据集做标记,对关系型特性没有要求,那么HDF5就是完美的选择。

那么说到底,“HDF5”究竟是指什么?我确信它包含下面3点:

1.一种文件规格及相关的数据模型;

2.一个可被C、C++、Java,Python以及其他语言使用的API标准库;

3.一个软件生态系统,由使用HDF5的客户程序以及MATLAB、IDL和Python等“分析平台”组成。

1.2.1 HDF5文件规格

你已经在上面的例子见到HDF5数据模型的三大要素:

数据集:一种数组型对象,在磁盘上保存数值类型的数据;

组:层次性容器,可以包含数据集和子组;

特征:自定义元数据信息,可被附加在数据集(以及组!)上。

用户可以使用这些基本抽象构建适合自己问题域的应用格式。比如,我们之前的气象站代码为每个气象站分了一个组,为每个测量参数分配一个数据集,并附加了一些特征以描述数据集的额外信息。这种统一使用“格式内格式”来决定如何用组、数据集和特征来保存信息的方式在实验室或者其他机构中是非常普遍的。

既然HDF5处理一切如“endian”的跨平台问题,数据的分享就只需要对组、数据集和特征进行简单操作并获得结果。由于文件是自我描述的,你甚至不需要了解应用格式就可以从文件中获取数据。你只需打开文件并浏览其内容:

任何曾经在读取“简单”二进制格式文件上花费数小时琢磨字节偏移量的人都应该对此充满感激。

最后,HDF5文件的底层字节布局是开放的规格。比起专利软件的二进制格式,这里面没有任何隐秘。虽然基本上人们都会使用HDF组织提供的库来访问这些文件,但是你自己写一个软件去读也没有任何问题。

1.2.2 HDF5标准库

HDF5文件规格及开源库由一个非营利性组织HDF组织(http://www.hdfgroup.org )维护,其总部位于伊利诺伊州尚佩恩县,原本是伊利诺伊大学香槟分校的一部分。HDF组织的主要产品是HDF5标准库。

该库主要用C语言写成,对C++和Java有一些额外的绑定。人们说起“HDF5”时通常就是指这个库。两大脍炙人口的Python接口模块PyTables和h5py使用的就是这个由HDF组织提供的C库。

这个标准库最主要的一点在于开发者对它的积极维护以及在向下兼容方面花费的巨大精力。标准库的向下兼容不仅仅是API的兼容,亦包括文件格式的兼容。对于HDF5这样的归档文件格式来说,兼容性是一个非常必需的特性。而API兼容则使h5py和PyTables这样的模块有能力处理世界上各种不同版本的HDF5。

对于科学数据的存储,包括长期的存储,你应该对HDF5有信心。由于标准库和文件格式都是开源的,哪怕一颗流星摧毁了伊利诺伊州,你的文件依然能够被读取。

1.2.3 HDF5生态系统

最后,让HDF5特别有用的一个原因是你可以在几乎任何平台上读写文件。IDL语言已经支持HDF5好多年了;MATLAB现在甚至以HDF5作为其“.mat”保存文件的默认格式;Python、C++、Java、.NET和LabView以及其他语言对其都有支持。NASA地球观测系统等机构用户使用的“EOS5”格式是建立在HDF5容器之上的应用格式,刚才我们见到的其实是其简化以后的例子。甚至作为HDF5竞争对手之一的NetCDF,其最新的NetCDF4格式也是实现在HDF5的组、数据集和特征之上。

 

### Visual Studio 2019 中 HDF5 的安装与配置 #### 下载并安装 HDF5 对于 Windows 用户来说,可以通过两种主要方法之一来获取 HDF5: - **使用预编译二进制文件**:访问 HDFGroup 官方网站上的下载页面[^3],选择适合操作系统的版本。确保所选的安装包与使用的 Visual Studio 版本兼容。 - **通过 CMake 构建源码**:如果偏好自定义构建,则可以从官方站点获得最新发布的 HDF5 源代码,并利用 CMake 工具来进行本地化编译[^1]。 一旦选择了合适的分发形式,在执行安装过程中需留意目标路径的选择,默认情况下会依据操作系统架构放置于 `Program Files` 或者 `Program Files (x86)` 文件夹内[^5]。 #### 设置开发环境 为了使项目能够顺利链接至 HDF5 库,必须调整项目的属性以及全局环境变量 PATH 。具体步骤如下: ##### 修改系统 PATH 变量 进入计算机属性中的高级选项卡下的环境变量面板,找到名为 "Path" 的条目,点击编辑按钮追加新项指向 HDF5 安装目录内的 bin 子文件夹位置[^4]。这一步骤使得命令提示符可以识别 hdf5 命令行工具。 ##### 调整 VS Project Settings 启动 Visual Studio 2019 并加载待修改的工作区或解决方案;右键单击解决方案资源管理器里的任意项目节点选取 “属性”,依次展开左侧导航树直至定位到 C/C++ 和 Linker 分支下面的各项设置页签[^2]。 ###### 添加 Include Directories 在 C/C++ -> General 页面里向 Additional Include Directories 输入框填入 HDF5 include 文件所在的位置,通常位于安装根目录下的 include 文件夹中。 ###### 更新 Library Paths and Dependencies 转到 Linker -> General ,同样地更新 Additional Library Directories 字段以包含 lib 文件所在的绝对地址。接着切换到 Input 小节补充依赖库名称(如 hdf5.lib),以便连接阶段能正常工作。 完成上述更改之后保存所有改动并重新构建整个方案即可验证是否成功集成了 HDF5 功能支持。 ```cpp // 示例代码片段展示如何初始化 HDF5 数据库对象 #include <hdf5.h> int main() { hid_t file_id; // 创建一个新的 HDF5 文件 file_id = H5Fcreate("example.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); // 关闭文件句柄释放资源 H5Fclose(file_id); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值