C++读写.mat文件的方法
最近在编写C++程序的过程中,需要使用matlab生成的.mat文件,于是查找了基本使用方法。
我的计算机环境是win764位系统,VS2010,matlabR2010b。
一、工程配置:
1.VC++目录->包含目录添加:
MATLAB\R2010b\extern\include
MATLAB\R2010b\extern\include\win64
->库目录添加:
MATLAB\R2010b\extern\lib\win64\microsoft
MATLAB\R2010b\extern\lib\win32\microsoft
2.C/C++->常规->附加包含目录添加:
MATLAB\R2010b\extern\include
MATLAB\R2010b\extern\include\win64
3.链接器->输入->附加依赖库添加:
libmat.lib
libmx.lib
libmex.lib
libeng.lib
由于所安装的matlab为64位,要调用其函数,需要将工程转换为X64
4.顶菜单->生成->配置管理器->平台:X64
5.链接器->高级->目标计算机:
MachineX64(/MACHINE:X64)
6.计算机环境变量->path添加:
E:\DevTools\MATLAB\R2010b\extern\lib\win64\microsoft;
E:\DevTools\MATLAB\R2010b\bin\win64;
二、所用到的基本读取写入mat文件代码示例:
首先需要包含头文件:
#include<mat.h>
[cpp]viewplaincopy
MATFile*pmatFile=NULL;
mxArray*pMxArray=NULL;
//读取.mat文件(例:mat文件名为"initUrban.mat",其中包含"initA")
double*initA;
pmatFile=matOpen("initUrban.mat","r");
pMxArray=matGetVariable(pmatFile,"initA");
initA=(double*)mxGetData(pMxArray);
M=mxGetM(pMxArray);
N=mxGetN(pMxArray);
Matrix<double>A(M,N);
for(inti=0;i<M;i++)
for(intj=0;j<N;j++)
A[i][j]=initA[M*j+i];
matClose(pmatFile);
mxFree(initA);
//生成.mat文件
double*outA=newdouble[M*N];
for(inti=0;i<M;i++)
for(intj=0;j<N;j++)
outA[M*j+i]=A[i][j];
pmatFile=matOpen("A.mat","w");
mxSetData(pMxArray,outA);
matPutVariable(pmatFile,"A",pMxArray);
matClose(pmatFile);
三、程序说明
1.使用matOpen函数打开mat文件
MATFile*matOpen(constchar*filename,constchar*mode)
mode:
r:以只读方式打开
u:更新模式,可读可写,但是如果要打开的数据文件不存在,也不会创建新的文件
w:以写入方式打开,只能写如入,如果要打开的数据文件不存在,则创建一个新的文件
2.使用matGetVariable函数读取mat文件中的变量
mxArray*matGetVariable(MATFile*pMF,constchar*name);
读取名为name的变量,返回一个数据阵列指针
3.使用mxGetData函数获取数据阵列中的数据
void*mxGetData(constmxArray*pa);
返回时需要使用强制类型转换。
4.使用mxGetM和mxGetN函数获取数据阵列矩阵的维数
size_tmxGetM(constmxArray*pa);
size_tmxGetN(constmxArray*pa);
5.使用mxSetData函数将变量存入数据阵列
voidmxSetData(mxArray*pa,void *newdata);
6.使用matPutVariable函数将数据阵列存入到mat文件中
intmatPutVariable(MATFile*pMF,constchar*name,constmxArray*pA);
存入成功返回0,存入出错返回非0
7.由于malab中矩阵的存储是按列存储,与c中不同,所以从mat文件中获取的矩阵需要重新排列。生成mat文件时,同样要注意。
相关文章
- C++读写txt文件(基本操作1)
- c++语言截取字符串,详解C++ string常用截取字符串方法
- C/C++读写文本文件、二进制文件「建议收藏」
- C++解析XML文件[通俗易懂]
- 深入理解C++11_c++ string char
- C++模版笔记(2)
- 【c++】【实用】文件输入输出
- C++字符串加密_c++字符串连接函数
- c++的链表-C++链表
- C/C++ 获取 PE 文件导出表
- C/C++ 查找指定文件HEX特征
- 【C++初阶】类和对象修炼上
- C++ C2760 语法错误: 意外标记 "标识符",应为 ";" 如何严谨的解决
- 【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )
- C++二进制文件的读取和写入(精华版)
- C++常量成员函数
- C++文件打开模式详解
- C++处理输入输出错误
- C++获取zip文件列表方法
- 解析C++无锁队列的实现代码
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法解析
- android杂记:C++文件的添加log方法分享
- C/C++实现矩阵的转置(示例代码)
- VC++在TXT文件指定位置追加内容的方法
- VC++实现CStdioFile写入及读取文件并自动换行的方法