0

mat ファイルに書き込みたい結果のデータの非常に大きな 2D ベクトルがあります。私は C++ の初心者で、MAT ファイル 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を変更するにはどうすればよいでしょうか。または、データの各行を個別にマット ファイルに入力する必要がありますか? 私が言ったように、私はこれにまったく慣れていないので、ばかげた質問であれば申し訳ありません。誰か提案はありますか?

4

1 に答える 1

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);
于 2014-06-19T12:58:41.063 に答える