[转]关于.mat文件

来源:互联网 发布:埼玉大学知乎 编辑:程序博客网 时间:2024/05/18 02:11

计算机上的mat文件突然间后缀没了,文档属性变为Microsoft Office Access 表快捷方式?

这是由于matlab和access2003的文件关联冲突引起的。
解决方法如下:
随便进入一个文件夹,
然后选工具选项卡,然后文件夹选项。
然后进入文件类型选项卡,
然后点新建。输入mat,
这时候系统会提示说这会破坏跟access文件的关联,
这时候点是的。
然后重新去看就会发现mat格式的数据就正常了。

 

 

mat文件法是先用C或者Fortran编写一个专门的文件,实现原数据与mat文件格式之间的转换,进而借助save、load实现matlab对原数据的读写。mat文件是matlab数据存储的默认文件格式,由文件头和数据组成,文件扩展名是.mat。

    下面介绍如何用vc6.0读写matlab的mat文件:

1、选VC的菜单Tools->Options,在弹出对话框中点选Directories标签,在右方的下拉菜单中选择Include files,然后在下方列表中添加($MATLAB$)externinclude;再在右方的下拉菜单中选择Library files,然后在下方列表中添加($MATLAB$)extern.lib win32microsoftmsvc60

注:上面的($MATLAB$)以计算机中MATLAB的安装位置替换;如果使用的VC版本是5.0,则把列表中添加路径中的msvc60替换成msvc50即可。

2、对于需要操作.mat文件的工程,选择菜单Project->Settings,在弹出对话框中点选Link标签,在Object/library modules中加入 libmx.lib、libmat.lib。下面是程序中的调用,以例子说明用法,必要时候如用到mxArray时候还要加入sgl.lib 和 libmatlbmx.lib。

3、一定要加入  #include "mat.h" ,如果要对mxArray进行操作,要加入include "matlab.h" 。具体的mfc程序的例子见“e:.....StaticDraw”工程。

C语言的源码:

写入.mat文件的示例:

1.   #include "mat.h"

2.    

3.   void main() {

4.       MATFile *pMF; // mat文件

5.       mxArray *pA; // 矩阵指针

6.       double *A; // 数据指针

7.       int i, j;

8.       // 打开一个test.mat文件,只写,如果不存在就新建,否则删除重建

9.       pMF = matOpen("test.mat", "w");

10.      // 新建一个12*4的矩阵只有实部(在MATLAB里矩阵都是复矩阵)

11.      pA = mxCreateDoubleMatrix(12, 4, mxREAL);

12.      // 给这个矩阵命名为x

13.      mxSetName(pA, "x");

14.      // 让指针Array指向这个矩阵的数据

15.      A = mxGetPr(pA);

16.      // VC里数组是按行排放的,在MATLAB里矩阵是按列排放的,)

17.      for (i = 0; i < 12; i++)

18.          for (j = 0; j < 4; j++)

19.              A[j * 12 + i] = i + 0.001 * j;

20.      // 将矩阵写到文件test

21.      matPutArray(pMF, pA); //好像没这个函数,如何实现看mfc的源程序

22.      // 释放矩阵空间

23.      mxDestroyArray(pA);

24.      // 关闭文件

25.      matClose(pMF);

26.  }

27.   

读出.mat文件的示例:

1.   #include

2.   #include "mat.h"

3.    

4.   void main() {

5.       MATFile *pMF; // mat文件

6.       mxArray *pA; // 矩阵指针

7.       double *A; // 数据指针

8.       int i, j;

9.       // 打开test.mat文件,只读(这里作为简单示例不做错误检查)

10.      pMF = matOpen("d: ick est.mat", "r");

11.      // 获得矩阵

12.      pA = matGetArray(pMF, "x");

13.      // 获得矩阵数据地址

14.      A = mxGetPr(pA);

15.      // 列印矩阵

16.      for (i = 0; i < 12; i++) {

17.          for (j = 0; j < 4; j++) cout << A[j * 12 + i] << ' ';

18.          cout << endl;

19.      }

20.      // 释放矩阵空间

21.      mxDestroyArray(pA);

22.      // 关闭文件

23.      matClose(pMF);/**/

24.  }

 


原创粉丝点击