最近在做城市计算的项目,数据文件是以.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的更多相关文章

  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. JQuery初识(二)

    一丶链式编程 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. 扩展(spread)/收集(rest)运算符

    一.扩展运算符(spread)    场景:使用在数组之前. 作用:将一个数组转为用逗号分隔的参数序列 举例1:数组之前 function foo(x, y, z){ console.log(x, y ...

  3. WebAPI项目添加定时服务

    开发平台: VS2019 背景: 在开发小程序的API服务的时候,由于access_token的有效期为7200秒,也就是2小时,这就需要后端定时的去更新这个access_token,便于调用小程序的 ...

  4. IE脚本调试

    打开IE -- 工具 -- Internet选项 -- 高级 --有4项. 1.禁用脚本调试(Internet Explorer)(去掉对勾) 2.禁用脚本调试(其他)(去掉对勾) 3.显示每个脚本错 ...

  5. Echarts样式

    Echarts设置样式如下 <div id="main" style="width: 250px;height:200px;"></div&g ...

  6. eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因 批处理java打包文件 @echo off start javaw -jar *.jar

    eclipse 导出Runnable JAR file 导出后如果系统没有JRE,双击无法运行,需要用命令方法 安装后解决,如图 双击后闪退的原因,通过执行 java -jar TingGe.jar ...

  7. c++question 004 c++基本数据类型有哪些?

    (1)signed int类型 整数型 占内存4个字节 一个字节byte 占8个二进制位 一个整型就占32位 (2)short int  短整型 占内存2个字节 一个短整型占16位 (3)long i ...

  8. 九、MySQL 创建数据表

    MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...

  9. k8s的service简述

    k8s向集群外部暴露端口的3种方式: 1.service->nodePort :仅暴露一个宿主机端口,用于集群外部访问,因为此操作被写入各个节点的iptables或ipvs规则当中,可以用任意一 ...

  10. MySQL存储引擎MyISAM与InnoDB的区别比较

    使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都会看到. MySQL默认的存储引擎是MyISAM,其他常用的就是InnoDB了. 至于到底用哪种存储引擎比较好?这个问题 ...