从c ++循环写入.mat文件

时间:2014-06-19 12:31:15

标签: c++ matlab for-loop mat-file

我有一个很大的2D结果数据,我想写入mat文件。我对C ++很陌生,我读了一些关于如何使用MAT-File API的教程,我理解语法必须是这样的:

MATFile *pmat;
vector<double> data{....};
pmat=matOpen("ResultLog.mat", "w");

mxArray *A;
A=mxCreateDoubleMatrix(1, columns, mxREAL);
memcpy(mxGetPr(A), data, columns * sizeof(double));
matPutVariable(pmat, "NameOfDataVariable", A);

matClose(pmat);
mxDestroyArray(A);

我的问题是,由于我有一些数据要记录,我真的想把它放到一个循环中。但是,我如何才能为每个循环更改 NameOfDataVariable ?或者我是否必须将每行数据分别输入到mat文件中?就像我说我对这个很新,所以我很抱歉,如果这是一个愚蠢的问题。有没有人有什么建议?

1 个答案:

答案 0 :(得分:2)

你可以做到,例如如下

MATFile *pmat;
vector<double> data{....};
pmat=matOpen("ResultLog.mat", "w");

// I actually don't know what loop conditions you have but
// this should give you an idea
int cnt = 0;    
for(vector<double>::iterator it = data.begin();
    it != data.end();
    ++it,++cnt) {
    mxArray *A;
    A=mxCreateDoubleMatrix(1, columns, mxREAL);
    memcpy(mxGetPr(A), *it, columns * sizeof(double));
    std::ostringstream varname;
    varname << "NameOfDataVariable" << cnt;
    matPutVariable(pmat, varname.str().c_str(), A);
    mxDestroyArray(A);
}

matClose(pmat);