2.1 Mat文件的读取与写入
MATLAB数据保存文件后缀名默认为.mat,因此对于.mat文件的操作是必须掌握的。本节主要讲叙Mat文件的读取与写入操作方法。
2.1.1 Mat文件的写入
MATLAB默认保存的数据为.mat格式,具体如图2-1所示。
图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所示。
图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所示。
图2-3 保存数据
用户单击如图2-3所示的【另存为…】命令,即弹出如图2-4所示数据保存界面。
图2-4 保存数据包
MATLAB默认的数据保存文件名为matlab.mat,当然用户可以对该名称进行修改,例如修改为ysw,单击【保存】按钮,在工作文件夹路径下可得到ysw.mat文件,如图2-5所示。
图2-5 ysw.mat
(5)同样,对于工作区的数据,也可以选择多个数据包,一起打包保存,具体如图2-6所示。
图2-6 多个数据包打包保存
因此,总的说来,MATLAB数据保存是比较容易的。
2.1.2 Mat文件的读取
如图2-7所示为一个数据加载过程示意图。
图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所示。
图2-8 数据导入
单击【导入数据…】命令,弹出导入向导,如图2-9所示。
图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所示。
图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细胞体中。