用C/C++读取MATLAB中mat文件中的Cell数据
来源:互联网 发布:今晚eia数据 编辑:程序博客网 时间:2024/05/21 12:42
一、引言
最近由于研究需要,要用C语言调用MATLAB中的cell数据。于是,百度了一下,很容易找到了C++读写.mat文件。
但发现该文中说的是如何用C/C++调用mat文件中的矩阵,而我要调用的是mat文件中的cell数据,于是,又开始在网上狂找资料。不过这次就没那么幸运了,最后终于找到了一根”救命稻草“——mxGetCell(),之后在C++读写.mat文件的基础上自己摸索了一下,顺利解决了问题!!详见第二节。
二、C/C++调用MATLAB中的cell数据
1、mxGetCell原型
/* * Get a pointer to the specified cell element. */ EXTERN_C mxArray *mxGetCell(const mxArray *pa, mwIndex i);
参数说明:
输入:
pa:指向mxArray类型的指针;
i:元胞中元素的标号;按列优先,依次为0,1,2…..。
输出:
指向mxArray类型的指针。
2、实例详解
a、这里要读入的是以下形式的元胞数组:
b、其中元胞a的主要内容如下:
c、C代码详解:
#include "mat.h"int main(){ MATFile *pmat;//指向mat文件的指针 const char **dir;//元素名列表 const char *file;//要打开的mat文件名 int ndir;//mat文件中的元素(矩阵、元胞)个数 mxArray *cell1;//指向要读取的元胞数据的指针 mxArray *mat1;//指向元胞中某个元素的指针 double *a;//指向元胞中某个元素第一个数据的指针 int cellM,cellN,M,N; int count; int i,j; file="cellMat.mat"; //要打开的mat文件名 pmat = matOpen(file, "r");//打开文件,返回指向文件指针 if (pmat == NULL) { printf("打开mat文件失败!"); return 0; } //读取mat文件中的矩阵列表(返回mat中包含的元素的名字) dir = (const char **)matGetDir(pmat, &ndir); if (dir == NULL) { printf("读取mat文件失败!"); return 0; } //输出cellMat.mat中的元素数量 printf("%s文件中一共有%d个元素\n",file,ndir); //从打开的mat文件中(pamt)读取名字为dir[0]的元胞 //(返回指向该矩阵的指针,注意:MATLAB中的矩阵是按列优先存储到) cell1 = matGetVariable(pmat,dir[0]);//指向名字为dir[0]的元胞 cellM = (int)mxGetM(cell1);//获取元胞的行数 cellN = (int)mxGetN(cell1);//获取元胞的列数 //按列优先依次读取元胞中的数据 for(count=0;count<cellM*cellM;count++) { mat1 = mxGetCell(cell1,count);//按列优先,指向元胞中的第count+1个元素 a = (double*)mxGetData(mat1);//指向mat1中的第一个数据 M = (int)mxGetM(mat1);//获取mat1的行数 N = (int)mxGetN(mat1);//获取mat1的列数 printf("元素%d的维数为:(%d,%d)\n",count,M,N); for (i=0;i<M;i++) { for (j=0;j<N;j++) printf("%-5.4f ",a[j*M+i]); printf("\n"); } } matClose(pmat);//关闭文件 return 0;}
d、代码运行结果:
从运行结果来看和上述MATLAB中显示的数据是一致的。
三、进一步探讨
由于上述读取的mat文件中只包含一个元胞数组,过于简单,大家可以参考上述代码,尝试读一下包含多个cell的mat文件以及多个cell与矩阵混合的mat文件,以此来加深理解。
最后,再次感谢C++读写.mat文件的作者!
说明:
对于上述代码中表述不清或不准确的地方欢迎大家批评指正!!
0 0
- 用C/C++读取MATLAB中mat文件中的Cell数据
- C中使用MATLAB的mat文件
- Python 之 h5py 读取 matlab 中 .mat 文件 cell 方法浅析
- R语言读取Matlab中的mat数据
- matlab中.mat文件的读取
- cell中遍历读取数据并写入数据库(c#)
- C语言编程中读取文件中的数据
- 使用C++语言读取*.mat文件中的数据 opencv matlab vs
- python利用h5py模块读取matlab中的mat文件并打印矩阵的数据类型,尺寸,数据
- c matlab mat
- matlab中关于读取.mat文件中的奇偶行数据问题
- 读取mat中的数据
- MATLAB和C++数据交类实例---读取mat文件
- 简明教程 C程序读取.mat格式的Matlab数据文件
- MATLAB生成、读取mat文件
- matlab读取、显示.mat文件
- c读取mat文件,并调用m生成的dll中的函数,函数返回值保存为mat文件
- matlab 中mat格式数据保存与读取
- 虚拟现实Demo
- gbk 编码表
- 如何修改tomcat端口
- Chapter02 控制结构和函数
- String Date Calendar之间的转换
- 用C/C++读取MATLAB中mat文件中的Cell数据
- 求栈的最小值
- 二维码及带logo二维码的生成和解析-Zxing
- hibernate不能自动建表
- Delphi WebBrowser与网页交互
- iptables 命令介绍
- Linux软件安装方式
- HDU 3613 Best Reward (manacher)
- Java:重写equals()和hashCode()