0

我正在尝试使用 mex 函数将向量返回给 matlab。我将返回指针声明为,

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

返回类型是 vector ,但我不断收到错误:

Error   1   error C2440: '=' : cannot convert from 'std::vector<_Ty>' to 'double'

我声明指针的方式有问题。任何帮助,将不胜感激。

问候, 埃里克

4

1 回答 1

0

如果你改变

retPtr[i] = forest->predictLabel(&(testData[i*M]), M); 

retPtr[i] = i;

然后它将编译并运行,将向量返回给 MATLAB。

当然,您可能不想要一个简单地从0to计数的向量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);
}
于 2013-11-05T15:55:25.593 回答