![MATLAB GUI设计入门与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/397/27110397/b_27110397.jpg)
2.1 Mat文件的读取与写入
MATLAB数据保存文件后缀名默认为.mat,因此对于.mat文件的操作是必须掌握的。本节主要讲叙Mat文件的读取与写入操作方法。
2.1.1 Mat文件的写入
MATLAB默认保存的数据为.mat格式,具体如图2-1所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00226.jpg?sign=1739955403-i0VVEEx3j1VnIsHzSRoZLA5Q3iLntRmd-0-06bae0688d539fea2be434583ac6ca34)
图2-1 .mat文件生成
具体如何保存为.mat文件呢?MATLAB有很多不同的保存数据的方式,具体如下。
(1)首先产生数据,代码如下:
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 x = randn(1000,1); % 产生数据
(2)进行数据的保存。
save x.mat x % 数据保存
save函数将x数据保存到x.mat文件中,同样也可以采用如下保存方式:
save y.mat x % 数据保存
这句代码的意思是将x这个数据保存到y.mat中。
相应的MATLAB工作路径文件夹下出现.mat数据文件,具体如图2-2所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00227.jpg?sign=1739955403-xKRggI7KnkYHLbhdMhYijyhGDLFpFlXP-0-bcfdbc97a6b4387279078548c33dcc13)
图2-2 mat文件
(3)当有多个数据时,同样可以采用save一次性保存,具体如下:
% Designed by Yu Shengwei From SWJTU University clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 format short % 数据类型 x=rand(10,1); % 产生数据 y = x; % 赋值 save xy.mat x y % 保存数据
读者只需要在第一数据后面添加要保存的数据名称即可,不同数据间采用空格隔开。
(4)MATLAB工作区存储着不同名称对应的数据包,用户可以通过鼠标右键保存,具体如图2-3所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00228.jpg?sign=1739955403-zL7ukwz7WUrHg9mEhvt7xA4sPdO22SBs-0-08e806fcf1095d3cac5cd1d24e70adb7)
图2-3 保存数据
用户单击如图2-3所示的【另存为…】命令,即弹出如图2-4所示数据保存界面。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00229.jpg?sign=1739955403-8pSy8yaDrEF20lUu3Qbrn1ZY1feB8Ajn-0-71a515b5d1fda298e46f9708748c7c1f)
图2-4 保存数据包
MATLAB默认的数据保存文件名为matlab.mat,当然用户可以对该名称进行修改,例如修改为ysw,单击【保存】按钮,在工作文件夹路径下可得到ysw.mat文件,如图2-5所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00230.jpg?sign=1739955403-hKgkBSUL987xrR4l8dOP4cIMFwqQ40bQ-0-9dd046e3e14561328e994c9916000eb6)
图2-5 ysw.mat
(5)同样,对于工作区的数据,也可以选择多个数据包,一起打包保存,具体如图2-6所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00231.jpg?sign=1739955403-UXVFZ0RhQXmhaEPuoJzzV7nyan1bOwNX-0-a1d412a6683d73cd6f43767d779e3619)
图2-6 多个数据包打包保存
因此,总的说来,MATLAB数据保存是比较容易的。
2.1.2 Mat文件的读取
如图2-7所示为一个数据加载过程示意图。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00232.jpg?sign=1739955403-R0t0KgiosyXUCmWPFE1Z24SlQl9j1qwh-0-aeb89d2920b48d79bea668cc7b238fd4)
图2-7 数据加载示意图
首先进行MATLAB工作区和命令窗口的清理工作,代码如下:
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行
(1)加载数据文件,采用load函数进行加载,具体代码如下:
load('ysw.mat') % 加载数据
当然MATLAB也提供了另外一种加载方式,其代码如下:
load ysw.mat % 加载数据
用户也可以双击选择的数据文件,则MATLAB命令窗口自动生成代码:
load('data.mat') % 加载数据
具体加载数据的方式,使用较多的则是通过脚本文件进行加载,即采用load('data.mat')代码形式。
(2)同样用户也可以用鼠标右键菜单命令进行数据导入,具体如图2-8所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00233.jpg?sign=1739955403-pToxgH5L3unseMg8ie48tOPrgjZ8la1M-0-b4cec33169fe2b04aaa4f89987a7be81)
图2-8 数据导入
单击【导入数据…】命令,弹出导入向导,如图2-9所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00234.jpg?sign=1739955403-QIfvv0wufEJXT5do9FYwJZvub4BsQBr0-0-f12577dff5e6db90eedf74b75c146276)
图2-9 导入向导
如图2-9所示,用户可以知道要导入的数据的大小、字节以及数据类型,也可以生成完成这个导入过程的MATAB代码,直接单击【完成】按钮,即可导入数据。
如果用户勾选【生成MATLAB代码】,则自动生成一个Untitled.m脚本文件,程序如下:
function importfile(fileToRead1) %IMPORTFILE(FILETOREAD1) % 从指定文件中导入数据 % FILETOREAD1: 要读取的文件 % 由 MATLAB 于 04-Jan-2015 19:38:37 自动生成 % 导入文件 newData1 = load('-mat', fileToRead1); % 加载.mat后缀的文件 % 在基础工作区中从这些字段创建新变量。 vars = fieldnames(newData1); % 变量名称 for i = 1:length(vars) % 长度 assignin('base', vars{i}, newData1.(vars{i})); % 进行base空间设置,赋值 end
具体如图2-10所示。
![](https://epubservercos.yuewen.com/3D1BDF/15477637404521206/epubprivate/OEBPS/Images/00235.jpg?sign=1739955403-Q0m6ccesiC1FeiuafN8u01si7RxwFamq-0-8720ed6bd725dfe1db390ea52327d64a)
图2-10 生成导入数据函数文件
此时用户可以直接在MATLAB命令行输入:
>> importfile('data') % 导入数据
即完成数据加载。
(3)load加载数据,能够节约程序执行时间,例如对一个图像进行读取,程序如下:
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 format short % 数据类型 tic % 运算计时 I = imread('me.jpg'); % 读图 toc % 计时结束
运行程序输出执行时间如下:
时间已过 0.260756 秒。
当采用load函数时,即直接加载保存的图像数据时,程序如下:
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 format short % 数据类型 tic % 运算计时 load('I.mat') toc % 计时结束
运行程序输出执行时间如下:
时间已过 0.009754 秒。
对比系统执行时间可知,采用load加载已经读取的数据,有助于提高系统执行效率,节约CPU损耗时间,特别是在循环读取图像数据时,可以事先将很多图像数据保存在一个cell细胞体中。