python怎么读取py文件python上数据存储.h5格式或者h5py
最近在做城市计算的项⽬,数据⽂件是以.h5的格式存储的,总结下其⽤法和特点
来⾃百度百科的简介:
HDF(Hierarchical Data Format),可以存储不同类型的图像和数码数据的⽂件格式,并且可以在不同类型的机器上传输,同时还有统⼀处理这种⽂件格式的函数库。⼤多数计算机都⽀持这种⽂件格式。
⽬前常⽤的图像⽂件格式很多,如GIF,JPG,PCX,TIFF等。这些格式共同的缺点是结构太简单,不能存放除影像信息外其他的有⽤数据,像遥感影像的坐标值、参数等都⽆法在其中保存,⽽且⽤不同格式存储影像数据使得读取、传输、共享变得复杂,因此,有必要建⽴⼀种标准格式以解决上述问题。
HDF是美国国家⾼级计算应⽤中⼼为了满⾜各种领域研究需求⽽研制的⼀种能⾼效存储和分发科学数据的新型数据格式。HDF可以表⽰出科学数据存储和分布的许多必要条件。HDF被设计为:
⾃述性:对于⼀个HDF⽂件⾥的每⼀个数据对象,有关该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF允许应⽤程序解释HDF⽂件的结构和内容。
通⽤性:许多数据类型都可以被嵌⼊在⼀个HDF⽂件⾥。例如,通过使⽤合适的HDF数据结构、符号、数字和图形数据可以同时存储在⼀个HDF⽂件⾥。
灵活性:HDF允许⽤户把相关的数据对象组合在⼀起,放到⼀个分层结构中,向数据对象添加描述和标签。它还允许⽤户把科学数据存放到多个HDF⽂件⾥。
扩展性:HDF极易容纳将来新增的数据模式,容易与其他标准格式兼容。
跨平台性:HDF是⼀个与平台⽆关的⽂件格式。HDF⽂件⽆需任何转换就可以在不同平台上使⽤。
科学家通常在不同的机器上⽣成和处理数据⽂件。各式各样的软件包被⽤来多种处理⽂件,同时也与其他使⽤不同机器和软件的⼈共享数据⽂件。在⼀组⽂件⾥,这些⽂件也许包含不同类型的信息。这些不同类型的信息混合结构在⼀个⽂件⾥的意义与另⼀个⽂件的意义不同。这些⽂件也许概念上有关但在实质上却不同。HDF通过提供⼀个⼀般⽬的的⽂件结构来表明这些问题:HDF为程序提供⼀个从数据⽂件本⾝获取数据信息的机制,⽽不是其他来源。
⼀、python读取HFD5⽂件
HDF5是⼀种层次化的格式(hierarchial format),经常⽤于存储复杂的科学数据。例如MATLAB就是⽤这个格式来存储数据,在存储带有关联的元数据(medata)的复杂层次化数据的时候,这个格式⾮常有⽤。例如计算机模拟实验室的运算结果等等。与HDF5相关的主要概念有以下⼏个:
⽂件file:层次化数据的容器,相当于树根(‘root’ for tree)
组group:树的⼀个节点(node for a tree)
数据集 dataset:数值数据的数组,可以⾮常⾮常⼤
属性atrribute:提供额外信息的⼩块的元数据
⽰例:创建hdf5⽂件
1import os
2import h5py
3import numpy as np
4
5 imgData = np.zeros((4392,2,16,8))
6
7if not ists('1.h5'):
8    with h5py.File('1.h5') as f:
9        f['data'] = imgData
10        f['labels'] = range(100)
⽰例:读取
import os
import h5py
import numpy as np
with h5py.File('test.hdf5') as f:
print(f)
print(f.keys)
HDF5的优点:
速度、内存占⽤,压缩程度都⽐cPickle+gzip来的优秀。
与其他⽅式对⽐:
1、numpy.save, numpy.savez, scipy.io.savemat
numpy和scipy提供的数据存储⽅法,官⽅说save的压缩版,尽管在实践中,什么都没能压缩到。⽽且这三个⽅法产⽣的⽂件⼤⼩都⼀样的...⾮常⼤。
2、cPickle+gzip
这⾥忽略pickle这家伙,直接被cPickle虐了
.是mnist的官⽅后缀。看来是会很好⽤的样⼦。
但在实际使⽤中,有两个难以避免的问题:
  速度慢,内存占⽤⾼(就是性能不好)
  ⼤矩阵存储⽆能
3、h5py
基本不到缺点,唯⼀的缺点是很难安装。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。