0

C++ コードに問題があります。cpp プログラムから Matlab に k 次元の行列を返したいです。

渡したい行列は に格納されておりall_data、サイズは の行列です(npoints+1) x ndims

私はそれを行う方法を探していましたが、思いついたのは次のとおりです。

    //send back points
    vector< vector <double> > indexes = mxGetPr(plhs[0]);
    for (int i=0; i < (npoints1+1); i++)
            for (int j=0; j < ndims1; j++)
                indexes[ i ][ j ] = all_data[ i ][ j ];

all_dataしかし、変数のように機能せずvector<vector<double>>、matlab は次のように述べています。

error: conversion from 'double*' to non-scalar type 
'std::vector<std::vector<double, std::allocator<double> >, 
std::allocator<std::vector<double, 
std::allocator<double> > > >' requested

誰かが私を助けることができますか?どうもありがとう!

4

2 に答える 2

4

mxGetPrを返しませんvector<vector<double> >。を返しますdouble *。MATLAB配列は、列優先のメモリに連続して格納されます。正しい寸法でplhs[0]を作成したとすると、必要なのはこれだけです。

double *indexes = mxGetPr(plhs[0]);
for (int i=0; i < (npoints1+1); i++)
    for (int j=0; j < ndims1; j++)
        indexes[i + ndims1*j] = all_data[ i ][ j ];

2つのインデックスが線形オフセットに変換されていることに注意してください。

于 2012-08-24T19:43:42.077 に答える
0

mxGetPrがdoubleの配列へのポインターを返し、それをベクトルのベクトルに割り当てているようです。

これは機能するはずです:

double* indexes = mxGetPr(plhs[0]);
于 2012-08-24T19:41:59.750 に答える