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:提供额外信息的小块的元数据
python操作HDF5文件:https://www.jianshu.com/p/998c861d32e3
示例:创建hdf5文件
import os
import h5py
import numpy as np imgData = np.zeros((4392,2,16,8)) if not os.path.exists('1.h5'):
with h5py.File('1.h5') as f:
f['data'] = imgData
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虐了
.pkl.gz是mnist的官方后缀。看来是会很好用的样子。
但在实际使用中,有两个难以避免的问题:
速度慢,内存占用高(就是性能不好)
大矩阵存储无能
3、h5py
基本找不到缺点,唯一的缺点是很难安装。
参考:http://www.cnblogs.com/Ponys/p/3671458.html
python上数据存储 .h5格式或者h5py的更多相关文章
- python 爬虫数据存入csv格式方法
python 爬虫数据存入csv格式方法 命令存储方式:scrapy crawl ju -o ju.csv 第一种方法:with open("F:/book_top250.csv" ...
- 杂: PYTHON上数据储存:推荐h5py
一篇很短的小短文,主要推荐下做科学计算是大量数据的储存问题 最近在做一个CNN的项目,文件夹里有20w张图片要读入并保存到一个data文件(不然每次都读20w文件太麻烦). 折腾了一个下午,发现了一个 ...
- python的数据存储
Python存储数据 使用json.dump()和json.load() 不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭程序时,你几乎总是要保存他们提供的信息:一种简单 ...
- python轻量级数据存储
python为开发者提供了一个轻量级的数据存储方式shelve,对于一些轻量数据,使用shelve是个比较不错的方式.对于shelve,可以看成是一个字典,它将数据以文件的形式存在本地.下面介绍具体用 ...
- python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/
Json数据处理 JSON支持数据格式: 对象(字典).使用花括号. 数组(列表).使用方括号. 整形.浮点型.布尔类型还有null类型. 字符串类型(字符串必须要用双引号,不能用单引号). 多个数据 ...
- python与数据存储
思考:为什么使用计算机? 存储数据,计算数据 思考:数据存在哪里? 数据存在内存里 内存:内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁.计算机中所有程序的运行都是在内存中进行的,因此内存的 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- 通过id()函数学习python的数据存储以及引用方式
id()函数是python的内置函数,用于获取对象的内存地址. 1.1 可以看出,33被存储在内存地址19877464上,对变量a赋值,实际上是将其指向存储着33的内存地址. 1.2 不仅是数字类型, ...
- python 爬虫数据时间转换格式
from datetime import datetimea = '2018/9/18 10/10'print(datetime.strptime(a,'%Y/%m/%d %H/%M'))>&g ...
随机推荐
- javascript浮点值运算舍入误差
问题 在javascript中整数和浮点数都属于Number数据类型(简单数据类型中的一种),我们经常会发现在打印1.0这样的浮点数的结果是1而非1.0,这是由于保存浮点数的内存空间是保存整数值的两倍 ...
- Git 团队常用命令操作指南
命令如下: git clone -b <branch name> [remote repository address] 主要就是在clone的时候,后面添加branch的信息. 报错: ...
- 9.26<立方网>技术笔试题
该公司题目感觉不难,算法设计有三道大题. 1.设有m和n两个整数,求它们的最大公约数和最小公倍数. 2.猴子分桃问题,每次分桃多一个,共有五个猴子,问最少有多少个桃子. 3.关于java的题目,有A, ...
- Garmin APP开发之入门
Garmin开发-入门 先附上几个已经开发完成的app日历 up down 翻月 start 回到当前月(就差农历了) 秒表和定时器一体app界面比较简单,但是实用,长按菜单键可以切换秒表和定时器,有 ...
- python3基础11(正则表达式及re模块)
#生成re对象 compile# 之后再期调用 match search 返回匹配到的字符串# findall 返回匹配结果的列表#如果要对匹配的结果进行分组,可加(),并可通过\数字 去应用
- python3基础10(操作日志)
#!/usr/bin/env python# -*- coding:UTF-8 -*- import logging, time, os # 这个是日志保存本地的路径log_path = " ...
- java常用框架总结
一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...
- Extjs4.1+desktop+SSH2 定义程序入口
app.js定义程序入口: MainController.js: 加载控制器: 外部组件引用入口loader.js 时间组件 静态变量组件: 引入comm.js index.jsp 验证打印 comm ...
- python 多进程简单调用
python 多进程简 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:03 # so ...
- select函数实例代码
select函数简解: selct 称之为多路复用IO,使用它可以让程序阻塞在select上,而非实际IO函数上. int select(int nfds, fd_set *readfds, fd_s ...