matlab — запись в цикле в файл .mat из переполнения стека

У меня есть довольно большой 2D-вектор данных результатов, которые я хочу записать в файл матов. Я довольно новичок в C ++, и я прочитал несколько уроков о том, как использовать API-интерфейсы MAT-File, и я понял, что синтаксис должен быть примерно таким:

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 отдельно? Как я уже сказал, я новичок в этом, поэтому извините, если это глупый вопрос. У кого-нибудь есть предложения?

0

Решение

Вы можете сделать, например, следующее

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);
2

Другие решения


По вопросам рекламы [email protected]