通过 mexfunction 将 int 类型的 N 个向量从 C++ 返回到 matlab

Returning N vectors of type int from C++ to matlab via mexfunction?

本文关键字:向量 C++ 返回 matlab mexfunction int 类型 通过      更新时间:2023-10-16

我正在尝试使用 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); 
}

返回类型是一个向量,但我不断收到错误:

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