当前位置: 首页 > news >正文

matlab查看hdf5数据,Matlab 操作 HDF5文件

HDF5文件

在使用Matlab对数据进行预处理时,遇到了内存不足的问题,因为数据量太大,在处理完成以前内存已经爆满。如果使用Matlab的.m文件对文件进行存储的话,则需要将数据分割成多个文件,对后续的处理造成了不便。HDF5文件则是一种灵活的文件存储格式,有一个最大的好处就是在Matlab的处理过程中可以对它进行扩展写入,也就是说不是所有数据处理完以后一次写入,而是边处理边写入,极大的降低了对系统内存的要求。

HDF5文件类似与一个文件系统,使用这个文件本身就可以对数据集(dataset)进行管理。例如下图所示,HDF5文件中的数据集皆存储根目录/,在根目录下存在多个group,这样一些group类似与文件系统的文件夹,在它们可以存储别的group,也可以存储数据集。

HDF5文件格式

对于每一个dataset 而言,除了数据本身之外,这个数据集还会有很多的属性 attribute,。在hdf5中,还同时支持存储数据集对应的属性信息,所有的属性信息的集合就叫做metadata;

MetaData

使用Matlab操作HDF5文件

使用Matlab创建HDF5文件

使用Matlab创建HDF5文件的函数是h5create,使用如下:

h5create(filename,datasetname,[30, 30 , 3, inf],'Datatype','single','ChunkSize',[30,30,3,1000])

filename为h5文件的文件名(不知道什么问题,在我的电脑上使用时,这个函数无法指定路径)。

datasetname则为数据集的名字,数据集名称必须以/开头,比如/G。

[30,30,3,inf]位数据集的大小,比如我的数据集为30x30大小的彩色图像,并且我希望数量能够扩展,那么就可以指定最后以为度为inf,以表示数量不限。

Datatype为数据类型

ChunkSize为数据存储的最小分块,为了让数据能够具有扩展性,所以为新来的数据分配一定的空间大小,对于一个非常大的数据,这个值设置大一点比较好,这样分块就会少一点。比如我的数据集中,30x30大小的彩色图像大概有10万个左右,那么1000个存储在一起较为合适,则chunksize设置为:[30,30,3,1000]。

使用Matlab写入HDF5

在创建了hdf5文件和数据集以后,则可以对数据集进行写操作以扩展里面的数据。使用Matlab写入HDF5文件的函数是h5write,使用如下:

h5write(fileName,datasetName,data,start,count);

fileName: hdf5文件名

datasetName:数据集名称,比如/G

data:需要写入的数据,数据的维度应该与创建时一致,比如,设置的数据集大小为[30,30,3,inf],那么这里的data的前三个维度就应该是[30, 30, 3],而最后一个维度则是自由的

start:数据存储的起点,如果是第一次存,则应该为[1, 1, 1, 1](注意数据维度的一致性),如果这次存了10000个样本,也就是[30,30,3,10000],那么第二次存储的时候起点就应该为[1,1,1,10001]

count存储数据的个数,同样要根据维度来(其实就是数据的维度),这里为[30,30,3,10000]

使用Matlab查看HDF5文件信息

Matlab中可以使用h5info函数来读取HDF5文件的信息:

fileInfo = h5info(fileName);

然后通过解析fileInfo结构,则可以得到HDF5文件中的数据集名称、数据集大小等等必要信息。

使用Matlab读取HDF5中的数据集

Matlab中可以使用h5read函数来读取HDF5文件:

data = h5read(filename,datasetname,start,count)

filename:HDF5文件文件名

datasetname:数据集名称

start:从数据集中取数据的其实位置

count:取的数据数量

还是以上面的30×30的彩色图像为例,如果每次需要取1000个,那么第一次取时,start应该设置为[1, 1, 1, 1] ,count设置为:[30, 30 ,3 1000]。第二次取值时,start则应该设置为[1, 1, 1, 1001],count则设置为:[30, 30, 3, 1000]。

相关文章:

  • 蓝桥杯java c组真题解析,蓝桥杯C语言C组校内赛题目解析
  • empty reply from server php,php curl连接返回:Empty reply from server
  • oracle掉电后ora 00600,oracle断电重启之ORA-00600[4194]
  • oracle+怎么清理碎片,oracle 收缩表、清理碎片,释放空间
  • oracle数据库程序题,oracle数据库经典练习题及答案
  • oracle的architecture,oracle architecture overview
  • oracle asm asm_power_limit,oracle ASM参数ASM_POWER_LIMIT以及其它一些参数详解
  • php使用keras模型,浅谈keras 模型用于预测时的注意事项
  • linux多进程实例代码,linux c多线程编程实例代码
  • 一台服务器可以装几个linux,Linux 一台服务器部署多个tomcat
  • linux 内核 grepcode,linux下grep用法
  • linux 无法定位程序,三步搞定无法定位程序输入点 于动态链接库上
  • linux pwm测试程序,DM8168 PWM驱动与测试程序
  • Linux批量加连续端口映射,批量端口映射
  • linux系统reales,红旗桌面5.0 是用图形安装的 没有办法登录
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • HTTP中的ETag在移动客户端的应用
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • jdbc就是这么简单
  • jquery ajax学习笔记
  • js对象的深浅拷贝
  • Lucene解析 - 基本概念
  • Magento 1.x 中文订单打印乱码
  • nodejs实现webservice问题总结
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 解析带emoji和链接的聊天系统消息
  • 每天一个设计模式之命令模式
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 浅谈web中前端模板引擎的使用
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 新书推荐|Windows黑客编程技术详解
  • 学习ES6 变量的解构赋值
  • 一个完整Java Web项目背后的密码
  • FaaS 的简单实践
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 我们雇佣了一只大猴子...
  • ​configparser --- 配置文件解析器​
  • $ git push -u origin master 推送到远程库出错
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)llvm ir转换过程
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (待修改)PyG安装步骤
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转) ns2/nam与nam实现相关的文件
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .Net中的集合