Вернуть N векторов типа int из C ++ в matlab через функцию mexfunction?

0

Я пытаюсь вернуть вектор обратно в 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'

У меня проблема, как я объявляю указатель. Любая помощь будет оценена по достоинству.

С уважением, Эрик

  • 0
    Если ваш тип возвращаемого значения - std::vector , разве вы не должны объявлять его как таковой, а не указатель на double?
  • 0
    Я не уверен, как это сделать, вы можете предложить, как это сделать?
Показать ещё 1 комментарий
Теги:
vector
compiler-errors
mex

1 ответ

0
Лучший ответ

Если вы меняете

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);
}
  • 0
    Предсказатель просто вычисляет вектор, а лес используется только для доступа к функции предсказателя. Когда я возвращаю только одно целочисленное значение из функцииgnastLabel, все работает нормально, без ошибок, и я получаю N выходных данных в matlab.
  • 0
    @efn: Так сколько выходов вы пытаетесь вернуть? N ? N*k ? Каждый вызов predictLabel имеет разное количество элементов? Ваш вектор содержит более одного элемента, поэтому он должен занимать более одного элемента в матрице, возвращаемой в MATLAB.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню