在C / C ++程序中使用Matlab单元数组

时间:2010-01-27 20:03:19

标签: c++ matlab

如何读取存储为.mat文件的Matlab cell array并将3 * 3 * 2多维双数据读入c / c ++数组?

3 个答案:

答案 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