HDF5文件介绍
HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF 小组维护下继续发展。当前流行的版本是 HDF5。HDF5 拥有一系列的优异特性,使其特别适合进行大量科学数据的存储和操作,如它支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等,详见其官方介绍:What is HDF5?。
H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),它是用于存储科学数据的一种文件格式和库文件。由美国超级计算中心与应用中心研发的文件格式,用以存储和组织大规模数据.
H5将文件结构简化成两个主要的对象类型:
1 数据集dataset,就是同一类型数据的多维数组
2 组group,是一种容器结构,可以包含数据集和其他组,若一个文件中存放了不同种类的数据集,这些数据集的管理就用到了group
直观的理解,可以参考我们的文件系统,不同的文件存放在不同的目录下:
1.目录就是hdf5文件中的group,描述了数据集DataSet的分类信息,通过group有效的将多种dataset进行管理和划分,类似于文件夹下面的子文件夹
2.文件就是hdf5文件中的dataset,表示具体的数据。
3.一个hdf5文件下可以同时存在group和Dataset,就像文件夹下可以同时存在文件和子文件夹。
下图就是数据集和组的关系:
创建hdf5文件中的dataset几种方式
import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")
#分别创建dset1,dset2,dset3这三个数据集
#方法1:有现成的numpy数组,可以在创建数据集的时候就赋值,不必指定数据的类型和形状了,只需要把数组名传给参数data。
a=np.arange(20)
d1=f.create_dataset("dset1",data=a)
#方法2:dset2是数据集的name,(3,4)代表数据集的shape,i代表的是数据集的元素类型
d2=f.create_dataset("dset2",(3,4),'i') # 先创建大小固定的存储空间
d2[...]=np.arange(12).reshape((3,4)) # 再赋值
# 方法3: 直接按照下面的方式创建数据集并赋值
f["dset3"]=np.arange(15)
for key in f.keys():
print(f[key].name)
print(f[key].value)
f.close()
/dset1
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
/dset2
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
/dset3
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
c:\users\14497\appdata\local\programs\python\python37\lib\site-packages\ipykernel_launcher.py:19: H5pyDeprecationWarning: dataset.value has been deprecated. Use dat