HDF文件

什么是HDF?

1.HDF是包含多种信息的一个单文件,所有的信息放在同一个文件中。
2.在HDF通过特定文件结构来存储多种不同信息。

HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以表示出科学数据存储和分布的许多必要条件。HDF 被设计为:

  • 自述性:对于一个HDF 文件里的每一个数据对象,有关于该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF 允许应用程序解释HDF文件的结构和内容。
  • 通用性:许多数据类型都可以被嵌入在一个HDF文件里。例如,通过使用合适的HDF 数据结构,符号、数字和图形数据可以同时存储在一个HDF 文件里。
  • 灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。它还允许用户把科学数据放到多个HDF 文件里。
  • 扩展性:HDF极易容纳将来新增加的数据模式,容易与其他标准格式兼容。
  • 跨平台性:HDF 是一个与平台无关的文件格式。HDF 文件无需任何转换就可以在不同平台上使用。
HDF 的6 种基本数据类型
HDF 提供6 种基本数据类型:光栅图像(Raster Image),调色板(Palette ),科学数据集(Scientific Data Set),注解(Annotation),虚拟数据(Vdata)和虚拟组(Vgroup)。


HDF 文件格式
最好的办法是把HDF 文件看成为一本多章节书。HDF 文件是“数据书”,其中每章都包含一个不同类型的数据内容。正如书籍用一个目录表列出它的章节一样,HDF文件用“data index”(数据索引)列出其数据内容



HDF 文件结构包括一个file id(文件号)、至少一个 data descriptor (数据描述符)、没有或多个 data element(数据内容)数据内容。


file id (文件号)是一个 32 比特的值,最多占用 HDF 文件的头4 个字节。通过读取这个值,应用程序就知道此文件是否是一个HDF 文件

Data descriptor block(数据块描述符)包含一个数据描述符数值。所有的数据描述符都是12 字节长,包含 4 个域,即一个 16比特长的标签,一个 16比特的引用字,一个 32比特的数据偏移量和一个32 比特的数据长度。

tag(标记)是数据描述符域,表示存于相应数据内容的数据类型。例如 306 是光栅图像对象的识别符。

Reference number(引用号)是一个 16 比特无符号整型数。HDF 文件中的每一个对象,由HDF库和数据描述符中的标签确定一个唯一的引用字。在引用字确定的数据对象期间,标签和引用字不能改变。标签和引用字的结合可以唯一确定文件中对应的数据对象。

引用字没有必要连续指定,因此,在一个具有相同标签区分对象的方法后,不能假设引用字的值有任何意义。有时应用程序员也会发现在他们的程序中把一些另外的信息加到引用字中是很方便的,但必须强调的是,HDF 库本身并不识别这些含义。

Data offset field(数据偏移量)是一个 32 比特无符号整型字。通过存储文件开始时的字节数和数据内容开始时的字节数,指明文件中数据内容的位置。

Length field (长度域)是一个 32 比特无符号整型字。它表示整个数据内容的字节大小。数据内容增加,其长度也要增加。

Data element(数据成分)是数据对象的原始数据部分,包含每个象素的值

HDF5 包含如下的改进:

  • 被设计为一种新的格式用来改进HDF4.x,特别是每个文件可以存储更大的文件和更多的对象。
  • 数据模式更简洁、更全面,它包含两个基本结构:多维数组记录结构,和分组结构。
  • 更简洁、更利于工程库和应用编程接口,支持并行 I/O,线程和其他一些现代系统和应用要求。
参考:


  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDF(Hierarchical Data Format)是一种用于存储和管理大型科学数据集的文件格式。Python中有多个库可以读取和写入HDF文件,其中最常用的是h5py和PyTables。 h5py库提供了一种Pythonic的方式来读取和写入HDF5文件,它基于HDF5库,可以在Python中使用numpy数组来存储和读取数据。以下是一个简单的示例,演示如何使用h5py库创建一个HDF5文件并写入数据: ```python import h5py import numpy as np # 创建一个HDF5文件 with h5py.File('example.hdf5', 'w') as f: # 创建一个名为'dataset'的数据集,并将数据写入其中 data = np.random.rand(100, 100) f.create_dataset('dataset', data=data) ``` PyTables库提供了一种更高级的接口来读取和写入HDF文件,它提供了一些额外的功能,如压缩和索引。以下是一个示例,演示如何使用PyTables库创建一个HDF5文件并写入数据: ```python import tables import numpy as np # 创建一个HDF5文件 with tables.open_file('example.hdf5', mode='w') as f: # 创建一个名为'dataset'的数据表,并将数据写入其中 data = np.random.rand(100, 100) table = f.create_table('/', 'dataset', description=data.dtype) table.append(data) table.flush() ``` 无论使用哪个库,读取HDF文件的过程都非常简单。以下是一个示例,演示如何使用h5py库读取HDF5文件中的数据: ```python import h5py # 打开HDF5文件 with h5py.File('example.hdf5', 'r') as f: # 读取名为'dataset'的数据集 data = f['dataset'][:] print(data) ``` 使用PyTables库读取HDF文件的过程也非常类似: ```python import tables # 打开HDF5文件 with tables.open_file('example.hdf5', mode='r') as f: # 读取名为'dataset'的数据表 table = f.get_node('/', 'dataset') data = table.read() print(data) ``` 总之,Python中的h5py和PyTables库提供了一种方便的方式来读取和写入HDF文件,这使得处理大型科学数据集变得更加容易。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值