• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab与外部接口:MAT文件基础

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 MAT 文件
MAT文件是MATLAB使用的一种特有的二进制数据文件。MAT文件可以包含一个或者多个MATLAB 变量。MATLAB通常采用MAT文件把工作空间的变量存储在磁盘里,在MAT文件中不仅保存各变量数据本身,而且同时保存变量名以及数据类型等。所以在MATLAB中载入某个MAT文件后,可以在当前MATLAB工作空间完全再现当初保存该MAT 文件时的那些变量。这是其他文件格式所不能的。同样,用户也可以使用MAT文件从MATLAB环境中导出数据。MAT文件提供了一种更简便的机制在不同操作平台之间移动MATLAB数据。
2.5.1 在MATLAB中读写MAT文件
在MATLAB环境中,通常使用load和save两个命令进行 MAT 文件的读和写。在默认情况下,这两个命令以 MAT 文件格式处理文件,但是也可以用–ascii参数选项来强制用文件方式处理文件。关于这点已经在本章介绍过了,这里主要介绍如何读写MAT文件。
1. load 函数的使用
load函数可以从MAT文件中读取数据,例如要读取mymat.dat文件,可以直接执行命令load mymat.dat,因为给出要读取的文件的后缀名是MAT,因此命令则以MAT文件格式读取数据,否则将以文本文件读取数据。命令中的文件名可以包含单引号,也可以不包含,也就是说该函数也可以这样调用:load \'mymat.mat\' .
load 函数还可以指定只读取文件中的某几个变量,只需在文件名之后列出想要读取的变量的变量名就可以了,变量名也可以使用通配符。 比如命令load mymat.mat y*,执行结果就是将文件中所有以y开头的变量读取出来。
load还有一种函数形式的调用方式。这种调用方式就要求文件名必须是字符串,比如要导入mymat.mat文件,那么函数形式的调用必须是s = load(\'mymat.mat\')。
● load:如果matlab.mat文件存在,导入matlab.mat中的所有变量,如果不存在,则返回error.
● load filename:将filename中的全部变量导入到工作区中。
● load filename X Y Z …:将filename中的变量X、Y、Z等导入到工作区中,如果是MAT文件,在指定变量时可以使用通配符"*".
● load filename -regexp expr1 expr2 …:通过正则表达式指定需要导入的变量。
● load -ascii filename:无论输入文件名是否包含有扩展名,将其以ASCII格式导入;如果指定的文件不是数字文本,则返回error.
● load -mat filename:无论输入文件名是否包含有扩展名,将其以mat格式导入;如果指定的文件不是MAT文件,则返回error.
2. save函数的使用
save 函数的功能是把当前MATLAB工作空间的一个或多个变量存写到外部文件。在默认情况下,save 函数以MAT格式存写数据。若在命令中直接调用该函数,不带任何参数,执行结果是把MATLAB工作空间的所有变量保存到系统默认的matlab.mat文件中。当然,带上文件名参数,就可以将当前工作空间中的所有变量存写在指定的 MAT文件中。
如果用户需要保存指定的某几个变量,只需在文件名参数后,列出要保存的文件名即可。比如,命令save mymat.mat x,y,z执行后的结果就是将当前工作空间中的变量 x,y,z保存到mymat.mat文件中,要求x,y,z是当前工作空间中已经存在的变量。
● save(\'filename\'):将工作区中的所有变量保存为文件,文件名由filename指定。如果filename中包含路径,则将文件保存在相应目录下,否则默认路径为当前路径。
● save(\'filename\', \'var1\', \'var2\', …):保存指定的变量在 filename 指定的文件中。
● save(\'filename\', \'-struct\', \'s\'):保存结构体s中全部域作为单独的变量。
● save(\'filename\', \'-struct\', \'s\', \'f1\', \'f2\', …):保存结构体s中的指定变量。
● save(\'-regexp\', expr1, expr2, …):通过正则表达式指定待保存的变量需满足的条件。
● save(\'…, \'format\'),指定保存文件的格式,格式可以为MAT文件、ASCII文件等

3.open与load的比较。
》 clear
》 A = magic(3);
》 B = rand(3);
》 save
Saving to: matlab.mat
》 clear
》 load(\'matlab.mat\')
》 A
A =
8 1 6
3 5 7
4 9 2
》 B
B =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
》 clear
》 open(\'matlab.mat\')
ans =
A: [3x3 double]
B: [3x3 double]
》 struc1=ans;
》 struc1.A
ans =
8 1 6
3 5 7
4 9 2
》 struc1.B
ans =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
4. 在普通的C/C++程序中读写MAT文件
1.使用MATLAB 提供的MAT 文件接口函数 在C/C++程序中有两种方式可以读取MAT文件数据。一种是利用MATLAB提供的有关MAT文件的编程接口函数。MATLAB的库函数中包含了MAT文件接口函数库,其中有各种对MAT文件进行读写的函数,都是以mat开头的函数。
matOpen 打开 MAT 文件
matClose 关闭 MAT 文件
matGetDir 从 MAT 文件中获得 MATLAB 阵列的列表
matGetFp 获得一个指向MAT 文件的ANSI C 文件指针
matGetVariable 从MAT文件中读取MATLAB阵列
matPutVariable 写MATLAB阵列到MAT文件
matGetNextVariable 从MAT文件中读取下一个MATLAB阵列
matDeleteVariable 从MAT文件中删去下一个MATLAB阵列
matPutVariableAsGlobal 从MATLAB阵列写入到MAT文件中
matGetVariableInfo 从MAT文件中读取MATLAB阵列头信息
matGetNextVariableInfo 从MAT文件中读取下一个MATLAB阵列头信息
2.在C/C++程序中读取MAT文件内容 www.tfjy386.com
另外一种在C/C++程序中读写 MAT 文件的方法是根据 MAT 文件结构,以二进制格式在C/C++中读入文件内容,然后解析文件内容,从而获得文件中保存的MATLAB数据。因为MAT文件格式是公开的,用户只要在找到安装路径下的一个名为matfile_format,pdf的文件,就可以详细了解 MAT 文件结构,从而在C/C++程序中以二进制格式读取文件内容,解析以后得到文件中保存的数据。具体方法在后面有讲解。 www.lefeng123.com
 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi注释发布时间:2022-07-18
下一篇:
delphi调用cmd的两种方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap