Я пытаюсь вернуть вектор обратно в matlab, используя функцию mex. Я объявляю возвращаемый указатель как,
double *retPtr = NULL;
Затем код возврата выглядит следующим образом:
plhs[0] = mxCreateDoubleMatrix(N, 1, mxREAL);
retPtr = mxGetPr(plhs[0]);
for (int i = 0; i < N; i++)
{
retPtr[i] = forest->predictLabel(&(testData[i*M]), M);
}
Тип возврата - это вектор, но я продолжаю получать ошибку:
Error 1 error C2440: '=' : cannot convert from 'std::vector<_Ty>' to 'double'
У меня проблема, как я объявляю указатель. Любая помощь будет оценена по достоинству.
С уважением, Эрик
Если вы меняете
retPtr[i] = forest->predictLabel(&(testData[i*M]), M);
в
retPtr[i] = i;
то он будет компилироваться и запускаться, возвращая вектор в MATLAB.
Конечно, вы, вероятно, не хотели, чтобы вектор просто подсчитывал от 0
до N-1
. Но вам нужно будет выяснить код C++, чтобы получить нужные вам номера. Никто из нас не имеет представления о том, что делает ваш объект forest
или функция predictLabel
.
Чтобы фактически вернуть N
разных векторов, вы можете упаковать их в массив ячеек (это позволяет изменять размер).
plhs[0] = mxCreateCellMatrix(M, 1);
for (int i = 0; i < N; i++)
{
std::vector<int> results = forest->predictLabel(&(testData[i*M]), M);
mxArray* ithCell = mxCreateDoubleMatrix(results.size(), 1, mxREAL);
retPtr = mxGetPr(ithCell);
for (int j = 0; j < results.size(); ++j)
retPtr[j] = results[j];
mxSetCell(plhs[0], i, ithCell);
}
N
? N*k
? Каждый вызов predictLabel
имеет разное количество элементов? Ваш вектор содержит более одного элемента, поэтому он должен занимать более одного элемента в матрице, возвращаемой в MATLAB.
std::vector
, разве вы не должны объявлять его как таковой, а не указатель на double?