2017-04-02 6 views
0

Eigen MatrixをMatlab出力パラメータとして渡すにはどうすればよいですか?Matlab mex出力にC++固有行列を渡す

私は[EIGEN] How to get in and out data from Eigen matrix:

MatrixXd resultEigen; // Eigen matrix with some result (non NULL!) 
double *resultC;    // NULL pointer 
Map<MatrixXd>(resultC, resultEigen.rows(), resultEigen.cols()) = resultEigen; 

からこれを試してみました。しかし、それは[0] plhsはにresultCで情報を渡す方法、情報が不足していますか? また、このマップを使用してコードを実行すると、Matlabは終了します。

+0

'Matlab'に' Eigen Matrix'を得ることはできません。 'Eigen'を使ってたくさん計算し、基礎となるデータを使って' Matlab'が理解して 'plhs'に追加するオブジェクトを作成することができます。 –

答えて

2

あなたはそれのまわりEigen::Mapを作成し、最初の出力MATLAB配列を割り当てる必要があります。

MatrixXd resultEigen; // Eigen matrix with some result (non NULL!) 
mwSize rows = resultEigen.rows(); 
mwSize cols = resultEigen.cols(); 
plhs[0] = mxCreateDoubleMatrix(rows, cols, mxREAL); // Create MATLAB array of same size 
Eigen::Map<Eigen::MatrixXd> map(mxGetPr(plhs[0], rows, cols); // Map the array 
map = resultEigen; // Copy 

これはありませんが、MATLAB配列(plhsは[0])を持っている固有行列(map)を作るですデータとして。書き込むと、実際にはMATLAB配列に書き込んでいます。

Eigen計算を実行する前にこのマップを作成し、最終コピーを避けるためにresultEigenの代わりにこのマップを使用できます。

入力配列でも全く同じことができます。それらがクラスdoublemxIsDoubleを使用している)であることを確かめてください、または物事は恐ろしく間違って行くかもしれません... :)

[免責事項:私はこのコードをコンパイルしていません。あなたが何かタイプミスをした場合は教えてください!]

関連する問題