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

基于Matlab进行H5读写操作

最近遇到了H5文件的读写问题,便查阅资料,但是网上结果参差不齐,于是就将本人的读写操作记录下来,水平有限仅供参考。

H5数据打印h5disp

由于我们事先不清楚H5文件中的信息,因此第一步便需要将H5的数据结果打印出来。

file='my.h5';
h5disp(file);

打印之后,将会看到H5中的group和dataset。例如,该H5文件中有两个Gropu分别是DATA和MOD,以及对应的数据集data和model。
在这里插入图片描述
以下是对应的两个数据

Name={'model name'};
fs=1e+3; 
Simulink.defineIntEnumType('FrequencyUnits', {'Hz', 'kHz', 'MHz'},[0;1;2]); 
model=struct('Name', {Name}, 'fs',fs, 'FrequencyUnits',int32(0));
data1=cell(2,1);
data1{1,1}=[1;2];
data1{2,1}=[3;4]; 
freq=[1: 100]';
data=struct('data',{data1}, 'freq', freq);

这两个数据集中有枚举类型和cell数组。

H5数据读取h5read

在清楚H5数据结构之后,我们就可以调用h5read读取各个dataset,即

data=h5read(filename,'Data/data/);
model=h5read(filename,'DMOD/model/);

建立H5文件H5F.create

在对H5的基本结构有了一定了解后,下面将展示如何建立一个H5文件。

H5F.create(filename, 'H5F_ACC_TRUNC','H5P_DEFAULT','H5P_DEFAULT');

函数的参数这里不做介绍,可以直接help了解。

打开建立H5文件H5F.open

fileID=H5F.open(filename, 'H5F_ACC_RDWR','H5P_DEFAULT');

建立H5文件中的Group H5G.create

H5G.create(fileID, '/MOD', 'H5P_DEFAULT', 'H5P_DEFAULT', 'H5P_DEFAULT') ; 
H5G.create(fileID, '/DATA', 'H5P_DEFAULT', 'H5P_DEFAULT', 'H5P_DEFAULT');

创建数据类型H5T.create

创建数据model

info=whos("model");
compoundtype=H5T.create('H5T_COMPOUND'',info.bytes);
stringtype=H5T.create('H5T_STRING''H5T_VARIABLE');
H5T.set_size(stringtype,'H5T_VARIABLE');
parent_id =H5T.copy('H5T_NATIVE_INT');

enumtype_freq = H5T.enum_create(parent_id);
H5T.enum_insert(enumtype_freq,'Hz'0);
H5T.enum_insert(enumtype_freq,'kHz'1);
H5T.enum_insert(enumtype_freq,1'MHZ'2);

offset=0:
H5T.insert(compoundtype,'Name',offset,stringtype);
offset=H5T.get_size(stringtype)+offset;
H5T.insert(compoundtype,'fs',offset,'H5T_NATIVE_INT');
offset=H5T.get_size('H5T_NATIVE_INT')+offset;
H5T.insert(compoundtype,'FrequencyUnits',offset,enumtype_freq)

创建数据data

info=whos("data"“);
compoundtype1=H5T.create('H5T_COMPOUND',info.bytes);
vlentype_double=H5T.vlen_create('H5T_NATIVE_DOUBLE');

offset=0:
H5T.insert(compoundtype1,'data',offset,vlentype_double);
offset=H5T.get_size(vlentype_double)+offset;
H5T.insert(compoundtype1,'freq',offset,'H5T_NATIVE_DOUBLE')

将数据集写入H5

model数据写入

attrValue='1.0':
spaceID=H5S.create_simple(111);
datasetID=H5D.create(fileID,'/MOD/model',compoundtype,spaceID,'H5P_DEFAULT');

H5D.write(datasetID,'H5ML_DEFAULT''H5S_ALL''H5S_ALL''H5P_DEFAULT',,model)h5writeatt(filename,,'/MOD/model''Version'',attrValue)

这里需要先创建数据空间大小,然后写入数据。此外,这里还展示了属性的写入方法。

data数据写入

spaceID=H5S.create_simple(122);
datasetID1=H5D.create(fileID,'/DATA/data',compoundtype1,spaceID,'H5P_DEFAULT');

H5D.write(datasetID1,'H5ML_DEFAULT''H5S_ALL''H5S_ALL''H5P_DEFAULT',data)

注意这里声明的空间大小和model变量不一样,因此这里设计一个2*1的cell数据写入。

关闭H5文件

H5F.close(fileID);

读写H5文件最重要的是了解几个基本结构体H5F,H5D,H5T等,以及如何构造数据类型。


http://www.kler.cn/news/358366.html

相关文章:

  • vue使用jquery的ajax,页面跳转
  • VMware虚拟机连不上网络,但VMware网络服务和网络适配器均正常
  • Android音视频 MediaCodec框架-创建流程(3)
  • resnetv1骨干
  • 阿里巴巴 | 推出升级版AI翻译工具:Marco MT 性能超越Google和ChatGPT
  • oracle创建用户与表空间,用户授权、以及导入dmp数据泵文件
  • Python----QT篇基础篇(一)
  • 图像中的融合
  • zotero文献管理学习
  • 柬埔寨旅游应该准备的高棉语翻译器《柬埔寨语翻译通》app语音翻译功能让你跟当地人无阻沟通交流,高棉语OCR识别技术分享
  • 桂林美景探索:SpringBoot旅游平台指南
  • 5.C++经典实例-判断输入的年份是否为闰年
  • go 中指针的执行效率比较
  • AI大模型开发架构设计(14)——基于LangChain大模型的案例架构实战
  • Windows环境apache控制台命令行启动、停止、重启httpd服务
  • 【Flutter】页面布局:线性布局(Row 和 Column)
  • mybatis针对枚举的处理的总结
  • 《Vue3 版本差异》Vue3.5+ 在组件或HTML元素绑定 ref 差异
  • (RAG 系列)重排序模型部署以及接入 fastgpt 平台
  • 【Flutter】页面布局:弹性布局(Flex)