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 に返します。

もちろん、単純に から までカウントするベクトルは必要ないでしょ0N-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 に答える