




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1高级例程函数5.2低级例程函数5.3数据导入向导5.1高级例程函数5.1.1MAT数据文件操作MAT数据文件是MATLAB独有的数据文件格式,这种文件是一种二进制格式文件,扩展名为 .mat。这些*.mat文件之所以能够独立于各种平台,是因为在MAT数据文件内带有设备的签名,MATLAB在导入这种数据文件时将检查这个签名,如果发现文件来源不同于当前的系统,则自动进行必要的转换。MAT数据文件的文件格式组成如图5-1所示。一般MAT数据文件分为两个部分:文件头部和数据。其中,文件的头部主要包括一些描述性文字和相应的版本与标识,这部分占用了120多字节;此后依次是保存在MAT文件中的数据,数据是按照数据类型、数据长度和数据三个部分保存的。MAT文件是MATLAB独有的文件格式,提供了跨平台的数据交换能力,也是MATLAB用户最常用的数据文件格式。在MATLAB中,可以将当前工作空间中的变量保存成MAT文件,也可以将MAT文件中的数据导入到MATLAB的工作空间中。这两个过程分别使用save命令和load命令来完成。save命令能够将当前工作空间中的变量保存到指定的数据文件中。其基本语法如下:其中,option可以有如下几种可能:load命令将数据文件的数据导入到MATLAB工作空间,其基本的语法如下:下面结合具体的操作实例来说明save和load命令的使用方法。【例5-1】save和load命令示例。在MATLAB命令行窗体中,键入下面的命令:>>clearall;clc;创建变量:>>x1=2;x2=3;x3=4;y1=0;保存数据:>>savexdatax1x2察看当前路径下的MAT文件:>>str=what(pwd)str=structwithfields:path:'D:\MyDocuments\MyWorks\MATLAB\Class\ML01_v4\Ch5'm:{8×1cell}mlapp:{0×1cell}mlx:{0×1cell}mat:{'xdata.mat'}mex:{0×1cell}mdl:{0×1cell}
slx:{0×1cell}sfx:{0×1cell}p:{0×1cell}classes:{0×1cell}packages:{0×1cell}将数据保存为ASCII格式文件:>>savexdata2.datx*-ascii>>clearall加载数据(默认加载二进制格式文件):>>loadxdata>>whosNameSizeBytesClassAttributesx11x18doublex21x18double加载ACSII格式的数据:>>loadxdata2.dat>>whosNameSizeBytesClassAttributesx11x18doublex21x18doublexdata23x124double使用whos命令察看MAT数据文件:>>whos-filexdata.matNameSizeBytesClassAttributesx11x18doublex21x18double察看其他格式数据文件则会报错:>>whos-filexdata2.datErrorusingwhosCouldnotopenxdata2.datasavalidMAT-file.例5-1演示了使用save和load命令保存加载数据的基本过程,需要注意保存数据文件时通配符“*”的使用。在例5-1的操作中,MATLAB将所有以x开头的变量保存到了纯文本文件(xdata2.dat)中。另外,在加载文本格式的数据时,MATLAB将所有的数据保存在一个变量之中。同样,在保存数据的时候,若不保存为二进制格式的MAT文件,则最好指定数据文件的扩展名。在使用save命令时需要注意,例5-1的保存数据文件的方法每次都会新建一个新的数据文件,也就是说,在不指定特别参数的情况下,每次保存数据文件时都会将原有数据全部覆盖。如果确实需要向已经存在的数据文件中追加数据,则需要使用'-append'命令行参数。例如,在MATLAB命令行窗体中键入下面的命令:>>x1=2;x2=3;x3=4;y1=0;>>savexdatax1x2>>whos-filexdata.matNameSizeBytesClassAttributesx11x18doublex21x18double再次向同一个数据文件中写入数据:>>savexdatax3>>whos-filexdata.matNameSizeBytesClassAttributesx31x18double此时数据文件被覆盖,需使用 '-append' 参数:>>savexdatax1x2-append>>whos-filexdata.matNameSizeBytesClassAttributesx11x18doublex21x18doublex31x18double【例5-2】save命令的数据压缩能力。在MATLAB命令行窗体中,键入下面的命令:>>A=rand(1000,1000);>>whosNameSizeBytesClassAttributesA1000x10008000000double保存数据文件:>>savefile1A察看数据文件所占硬盘空间:>>!dirfile*.matVolumeindriveDisWorkspaceVolumeSerialNumberis9C7B-BCD1DirectoryofD:\MyDocuments\MyWorks\MATLAB\Class\ML01_v4\Ch52020/11/2414:157,566,218file1.mat1File(s)7,566,218bytes0Dir(s)393,796,476,928bytesfree保存成非压缩格式:>>savefile2A-v6察看数据文件所占硬盘空间:>>!dirfile*.matVolumeindriveDisWorkspaceVolumeSerialNumberis9C7B-BCD1DirectoryofD:\MyDocuments\MyWorks\MATLAB\Class\ML01_v4\Ch52020/11/2414:157,566,218file1.mat2020/11/2414:168,000,184file2.mat2File(s)15,566,402bytes0Dir(s)393,788,473,344bytesfree由上面的操作可以看到,在当前的MATLAB版本下,默认保存1 000 000个双精度的数据所占用的硬盘空间为7 566 218B,而不压缩时(使用参数-v6),则占用了8 000 184B。如果确实不想使用MATLAB数据文件压缩保存的特性,则可以通过MATLAB的Preferences对话框中相应的设置来取消数据文件压缩特性。在处理结构数据时,save和load有一些特殊的操作,见下面的示例。【例5-3】save和load命令对结构的操作。在MATLAB命令行窗体中,键入下面的命令:>>Movie.Name="Thunderball";>>Movie.Grade=6.9;>>Movie.LeadActor='SeanConnery';>>Movie.LeadActress='ClaudineAuger';>>whosNameSizeBytesClassAttributesMovie1x1898struct>>saveMovie.mat-structMovie>>clearall>>loadMovie.mat>>whosName SizeBytesClassAttributesGrade 1x18doubleLeadActor 1x1224charLeadActress 1x1428charName 1x1166string可以看到,当使用了'-struct'命令行参数之后,save命令将结构的不同字段分别作为变量保存在了MAT数据文件中,如果不使用这个参数,则保存的数据就是一个结构对象。5.1.2文本文件操作通常情况下,save和load命令仅用于处理.mat格式的数据文件,尽管利用这两个命令也可以将数据加载或者保存为纯文本格式的数据文件,但是要求数据文件内容相对比较简单。很多时候,第三方提供的数据文件数据之间具有特殊的间隔符,或者要求使用特别的间隔符间隔数据,或者直接使用Excel电子表格形式保存了数据,这时save或者load命令就不能发挥作用了。MATLAB对应常见的标准数据文件提供了相应的函数,用来完成这些类型数据文件的加载和保存工作。表5-1对常用的数据文件读写函数进行了总结。5.1.3导入其他类型数据文件除了前面讲述的几种数据文件类型以外,MATLAB还能够加载声音、图像等二进制数据文件。MATLAB能够读入的二进制数据文件类型以及相应的加载函数可以通过阅读MATLAB帮助文档中FileFormat的相关信息来了解其细节。表5-2总结了MALAB可以直接加载的常见二进制数据文件类型。5.1.4导出二进制格式数据MATLAB除了能够导入前面介绍的各种格式的数据文件外,还可以将工作空间的数据导出成不同格式的文件。这一过程不仅可以通过图形用户界面完成,还可以通过MATLAB函数来完成。不过导出二进制文件没有统一的函数可以使用,不同格式的文件有不同的导出函数。表5-4对部分函数进行了总结。5.2低级例程函数5.2.1打开与关闭文件在进行文件读写之前必须将需要读写的文件在MATLAB中打开。打开文件的函数为fopen,其命令行格式如下:fid=fopen('filename','flag');其中,flag为控制文件读写的标识符,它的取值可以如下所示。r:表示打开的文件进行读的操作;w:表示打开的文件进行写的操作,若文件不存在,则创建新的文件;a:表示打开的文件进行追加数据的操作,若文件不存在,则创建新的文件;r+:表示打开的文件既可以进行写的操作,也可以进行读的操作;w+:表示打开的文件既可以进行写的操作,也可以进行读的操作,若文件不存在,则创建新的文件;a+:表示打开的文件既可以进行写的操作,也可以进行读的操作,还可以进行数据追加操作,若文件不存在,则创建新的文件。若能够成功地打开文件,则fid为非负的整数,否则为-1。如果有错误信息,则可以作为fopen函数的第二个输出参数输出到工作空间来,所以使用fopen函数的常见代码段如下所示。001 fid=0;002 filename=input('Openfile:','s');003 [fid,message]=fopen(filename,'r');004 iffid==-1005 disp(message)006 end这段代码从命令行窗体中获取一个文件名,然后用fopen函数打开它,若没有成功,则将相应的错误信息显示在命令行窗体中。关闭已经打开的文件需要使用fclose函数,其基本的命令格式如下:status=fclose(fid)关闭文件之后,fid变量依然存在于工作空间中,但是对fid再进行文件IO操作是错误的。若fclose函数运行成功,则status为0,否则为-1。5.2.2读写数据打开文件之后就是进行文件内容的读写了,MATLAB提供了两大类低级文件IO函数(二进制文件读写函数和文本文件读写函数),用于进行文件内容的读写。表5-5对这些函数进行了简要总结。若在文件读写过程中出现了错误,则可以使用ferror函数获取文件IO过程的错误信息。下面通过针对不同类型的文件的读写举例来说明这些文件低级IO函数的使用方法。【例5-8】格式化输入/输出示例—txtio_example.m。001 function[data,count]=txtio_example002 %TXTIO_EXAMPLE例5-8文本文件的格式化输入/输出003 004 %打开一个文本文件写入数据005 [fidmsg]=fopen('square_mat.txt','wt');006 iffid==-1007 disp(msg);008 return;009 end010 %写入数据011 count=fprintf(fid,'%s\n','文本文件格式化输入/输出示例');012 count=fprintf(fid,'%i\t%i\t%i\n',[123;456;789]);013 %关闭文件014 fclose(fid);015 %打开文本文件读入数据016 fid=fopen('square_mat.txt','rt');017 iffid==-1018 disp(msg);019 return;020 end021 %读取数据022 title=fgetl(fid);023 disp(title);024 data=fscanf(fid,'%i');025 data=reshape(data,3,3);026 %关闭文件027 fclose(fid);在MATLAB中使用这些函数充分利用了基于向量或者矩阵的运算特点。运行例5-8,在MATLAB命令行中键入命令:>>[datacount]=txtio_example文本文件格式化输入/输出示例:data=123456789count=18上面的代码中在012行向数据文件写入数据,由于是按照整数类型数据写入的,所以每个元素占据2B空间,一共是18B的空间。【例5-9】二进制文件的读写—binio_example.m。001 function[data,count,status]=binio_example002 %binio_example例5-9二进制文件读写示例003 004 %打开二进制文件写入数据005 fid=fopen('magic5.bin','wb');006 %写入文本数据007 count=fwrite(fid,'喂,你好吗?','int32');008 %写入数据009 fwrite(fid,magic(5),'int32');010 %关闭文件011 status=fclose(fid);012 %打开二进制文件读取数据013 fid=fopen('magic5.bin','rb');014 %读取文本015 S=fread(fid,count,'int32');016 disp(['读取数据类型:',class(S)]);017 disp(['读取数据内容:',char(S')]);018 %读取数据019 [datacount]=fread(fid,'int32');020 data=reshape(data,5,5);021 %关闭文件022 status=fclose(fid);读写二进制文件的时候略微麻烦一些,就是在读写数据的时候需要指定数据的类型和读取数据的个数。例如,在例5-8的007、009行写入数据时,分别要指定写入数据的类型,在015、019行读入数据时,需要指定读取的数据类型和个数,并且这些信息要同数据文件的内容保持一致,否则读入的数据就会不正确。表5-6总结了二进制文件读写时常见的数据类型标识符。若在fread函数或者fwrite函数进行操作的时候不指定数据类型标识符,则默认按照uint8的格式读写数据。运行例5-9的代码,在MATLAB命令行中键入:>>[datacountstatus]=binio_example读取数据类型:double读取数据内容:喂,你好吗?data=17241815235714164613202210121921311182529count=25status=0除了表5-6总结的各种数据类型标识符外,现在比较流行的还有C/C++编程语言的数据类型,如short、float、ushort、long等。5.2.3文件位置指针当正确地打开文件并进行数据的读写时,MATLAB会自动创建一个文件位置指针来管理维护文件读写数据的起始位置。所以,在进行数据文件的读写时,需要通过某种手段来判断当前的文件位置指针,例如判断当前文件位置指针是否已经到达文件尾部,将文件位置指针移动到指定的位置,获取当前文件位置指针在文件中的位置以及将文件位置指针重置在文件的头部等。在MATLAB中,通过表5-7中的函数来控制判断文件位置指针。fseek函数的命令行格式如下:status=fseek(fid,offset,origin)在命令行中,fid指已经打开的数据文件,而offset是指移动文件指针的偏移量,若数值为正,则向文件尾部的方向移动数据文件指针,若数值为0,则不移动文件位置指针,若数值为负则向文件头部的方向移动文件指针,offset的单位为字节。Origin为字符向量,代表文件指针的位置,有效值为bof,表示文件的头部,cof表示当前的文件指针位置,eof表示文件的尾部。函数的返回值status若为0,则表示操作成功,否则为-1。错误的类型可以用ferror函数获取。MATLAB的文本文件格式化输入操作函数中,有一个textscan函数,同时MATLAB还提供了textread函数和strread函数可以处理纯文本数据。MATLAB现在推荐用户使用textscan函数来完成文本数据文件的读取,这个函数和textread函数之间的区别在于:在使用textscan函数之前,需要使用fopen函数将数据文件打开,读取数据之后,要用fclose函数关闭数据文件;在性能方面,textscan函数要比textread函数好,如果读取大量数据的话,最好使用textscan函数;使用textscan函数可以从数据文件任意位置开始读取数据,而textread函数只能从数据文件的头部顺序读取数据;使用textscan函数时,函数的参数个数不一定与读取的数据完全匹配,而且textscan函数提供比textread函数更加灵活的读取数据方式。5.3数据导入向导为了方便用户完成数据导入,MATLAB还提供了一个叫作导入数据向导的图形化工具。利用该工具就不必通过编写程序来实现数据文件导入到MATLAB工作空间。【例5-13】通过数据导入向导导入文本数据文件。在MATLAB命令行窗体中键入命令uiimport,此时将弹出对话框要求选择数据源,如图5-4所示。这里选择File,即从数据文件导入数据,这时MATLAB将启动打开数据文件对话框。这个时候需要选择导入的数据文件,在本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国铝挤压行业市场运营状况及发展趋势分析报告
- 2025-2030年中国金属波纹补偿器市场发展状况及前景趋势分析报告
- 2025天津市安全员《B证》考试题库及答案
- 2025-2030年中国聚对苯二甲酸丁行业投资战略决策研究报告
- 2025-2030年中国纺织机械制造产业十三五规划及投资战略研究报告
- 2025-2030年中国石斑鱼市场运行状况与十三五规划研究报告
- 2025-2030年中国电热水器行业竞争格局及投资战略研究报告
- 2025年江西省建筑安全员A证考试题库附答案
- 钦州幼儿师范高等专科学校《新能源汽车结构与原理》2023-2024学年第二学期期末试卷
- 2025浙江省安全员考试题库
- 如何做好4S管理
- 民航客舱应急设备
- 化工总控工培训
- 2024年小红书初级营销师题库
- 山西电网新能源场站涉网试验流程使用说明书
- 课题1 碳单质的多样性(第1课时)课件九年级化学上册人教版2024
- 康复医学题库与答案
- 1、DL-T5113.1-2019 水利水电工程单元工程质量等级评定标准第一部分:土建工程用表
- 2024年医院感染管理制度(四篇)
- 部编版语文三年级下册综合性阅读-理解人物情感-课件-(共32张课件).课件
- 2024年中国甜瓜市场调查研究报告
评论
0/150
提交评论