如何读取存储为.mat文件的Matlab cell array并将3 * 3 * 2多维双数据读入c / c ++数组?
答案 0 :(得分:1)
MATLAB文件格式为documented here。看起来不太毛茸茸。
编辑:抱歉,该链接已损坏。
答案 1 :(得分:1)
链接libmx.lib,libmat.lib,libeng.lib,并包含标题mat.h和engine.h。我忽略了数据的虚构组件,并假设您知道如何使用C ++ STL。下面的代码已经足够了,但是这里有一个名为mxWrapper的简单界面:http://www.mathworks.com/matlabcentral/fileexchange/28331-replacement-for-mwarray-using-matlab-engine
vector<double> readSomeNumbers()
{
vector<double> data;
mxArray *pMx=load("c:\\someFile.mat", "foobar");
if (!pMx) return data;
ASSERT(mxGetClassID(pMx) == mxDOUBLE_CLASS);
data.assign(mxGetPr(pMx), mxGetPr(pMx)+mxGetNumberOfElements(pMx));
mxDestroyArray(pMx);
return data;
}
mxArray *load(const string& fileName, const string& variableName)
{
MATFile *pmatFile = matOpen(fileName.c_str(), "r");
if(pmatFile == NULL)
return NULL;
mxArray* pMx = matGetVariable(pmatFile, variableName.c_str());
if(pMx == NULL)
{
matClose(pmatFile);
return NULL;
}
matClose(pmatFile);
return pMx;
}
vector<double> data;
mxArray *pMx=load("c:\\someFile.mat", "foobar");
if (!pMx) return data;
ASSERT(mxGetClassID(pMx) == mxDOUBLE_CLASS);
data.assign(mxGetPr(pMx), mxGetPr(pMx)+mxGetNumberOfElements(pMx));
mxDestroyArray(pMx);
return data;
}
mxArray *load(const string& fileName, const string& variableName)
{
MATFile *pmatFile = matOpen(fileName.c_str(), "r");
if(pmatFile == NULL)
return NULL;
mxArray* pMx = matGetVariable(pmatFile, variableName.c_str());
if(pMx == NULL)
{
matClose(pmatFile);
return NULL;
}
matClose(pmatFile);
return pMx;
}
答案 2 :(得分:0)
本文档描述了在C / C ++中读写MAT文件的接口:
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/f39876.html#f13830