最近在做城市计算的项目,数据文件是以.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:提供额外信息的小块的元数据

python操作HDF5文件:https://www.jianshu.com/p/998c861d32e3

示例:创建hdf5文件

  1. import os
  2. import h5py
  3. import numpy as np
  4.  
  5. imgData = np.zeros((4392,2,16,8))
  6.  
  7. if not os.path.exists('1.h5'):
  8. with h5py.File('1.h5') as f:
  9. f['data'] = imgData
  10. f['labels'] = range(100)

示例:读取

  1. import os
  2. import h5py
  3. import numpy as np
  4.  
  5. with h5py.File('test.hdf5') as f:
  6. print(f)
  7. print(f.keys)

HDF5的优点:

速度、内存占用,压缩程度都比cPickle+gzip来的优秀。

与其他方式对比:

1、numpy.save, numpy.savez, scipy.io.savemat

numpy和scipy提供的数据存储方法,官方说save的压缩版,尽管在实践中,什么都没能压缩到。

而且这三个方法产生的文件大小都一样的...非常大。

2、cPickle+gzip

这里忽略pickle这家伙,直接被cPickle虐了

.pkl.gz是mnist的官方后缀。看来是会很好用的样子。

但在实际使用中,有两个难以避免的问题:

  速度慢,内存占用高(就是性能不好)

  大矩阵存储无能

3、h5py

基本找不到缺点,唯一的缺点是很难安装。

参考:http://www.cnblogs.com/Ponys/p/3671458.html

python上数据存储 .h5格式或者h5py的更多相关文章

  1. python 爬虫数据存入csv格式方法

    python 爬虫数据存入csv格式方法 命令存储方式:scrapy crawl ju -o ju.csv 第一种方法:with open("F:/book_top250.csv" ...

  2. 杂: PYTHON上数据储存:推荐h5py

    一篇很短的小短文,主要推荐下做科学计算是大量数据的储存问题 最近在做一个CNN的项目,文件夹里有20w张图片要读入并保存到一个data文件(不然每次都读20w文件太麻烦). 折腾了一个下午,发现了一个 ...

  3. python的数据存储

    Python存储数据 使用json.dump()和json.load() 不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭程序时,你几乎总是要保存他们提供的信息:一种简单 ...

  4. python轻量级数据存储

    python为开发者提供了一个轻量级的数据存储方式shelve,对于一些轻量数据,使用shelve是个比较不错的方式.对于shelve,可以看成是一个字典,它将数据以文件的形式存在本地.下面介绍具体用 ...

  5. python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/

    Json数据处理 JSON支持数据格式: 对象(字典).使用花括号. 数组(列表).使用方括号. 整形.浮点型.布尔类型还有null类型. 字符串类型(字符串必须要用双引号,不能用单引号). 多个数据 ...

  6. python与数据存储

    思考:为什么使用计算机? 存储数据,计算数据 思考:数据存在哪里? 数据存在内存里 内存:内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的 ...

  7. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  8. 通过id()函数学习python的数据存储以及引用方式

    id()函数是python的内置函数,用于获取对象的内存地址. 1.1 可以看出,33被存储在内存地址19877464上,对变量a赋值,实际上是将其指向存储着33的内存地址. 1.2 不仅是数字类型, ...

  9. python 爬虫数据时间转换格式

    from datetime import datetimea = '2018/9/18 10/10'print(datetime.strptime(a,'%Y/%m/%d %H/%M'))>&g ...

随机推荐

  1. input和textarea修改placeholder颜色和字号

    方式1因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定(可以在冒号前面写input和textarea).::-webkit-input-placeholder { /* We ...

  2. weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架

    写在前面的话: weex官方文档不完善,在整个实施过程中遇到过很多坑,中途几次想放弃,总是有些不甘心.攻坚克难,总也是会有一些收获,先将收获进行分享也或是记录,防止忘记.要想用好weex必须对es5/ ...

  3. MATLAB之易经卜卦程序+GUI

    MATLAB之易经卜卦程序+GUI   日月为易,刚柔相推. 是故易有太极,是生两仪,两仪生四象,四象生八卦,八卦定吉凶,吉凶生大业.是故法象莫大乎天地,变通莫大乎四时,悬象著明莫大乎日月.   本文 ...

  4. 适用于 Internet Explorer 11 的企业模式

    https://technet.microsoft.com/zh-cn/itpro/internet-explorer/ie11-deploy-guide/enterprise-mode-overvi ...

  5. javascript实现 滚动条滚动 加载内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. git记录

    2017-3-30:git常用命令:1.$ git init:初始化git仓库2.$ git add *.c:跟踪文件3.$ git commit -m 'initial project versio ...

  7. jq实现剪裁图片设置为头像

    有时候我们需要设置为这样,就是将某些图片设置为剪裁成设置的尺寸:就是这样的 插件的地址: http://www.htmleaf.com/jQuery/Image-Effects/20150421171 ...

  8. POJ 3280 Cheapest Palindrome(区间dp)

    dp[i][j]表示处理完i到j的花费,如果s[i] == s[j] 则不需要处理,否则处理s[i]或s[j], 对一个字符ch,加上ch或删掉ch对区间转移来说效果是一样的,两者取min. #inc ...

  9. BZOJ 1229: [USACO2008 Nov]toy 玩具

    BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...

  10. python剑指offer 链表中环的入口节点

    题目: 一个链表中包含环,请找出该链表的环的入口结点. 思路: 先说个定理:两个指针一个fast.一个slow同时从一个链表的头部出发, fast一次走2步,slow一次走一步,如果该链表有环,两个指 ...