2017-04-02 102 views
0

如何将Eigen Matrix作为Matlab输出参数传递?将C++特征矩阵传递给Matlab mex输出

我想这从[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; 

但它缺乏信息,如何通过在resultC到plhs [0]的信息?另外,当我使用这个Map运行代码时,Matlab关闭。

+0

你不能''Eigen矩阵'''Matlab'。你可以做的是使用'Eigen'计算大量数据,并使用底层数据创建一个对象,该对象可以被'Matlab'理解并添加到'plhs'中。 –

回答

2

您需要首先分配输出MATLAB阵列,然后创建一个Eigen::Map周围:

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阵列的特征矩阵(map)(plhs [0])作为数据。当你写入它时,实际上是在写入MATLAB数组。

请注意,您可以在进行Eigen计算之前创建此地图,并使用它代替resultEigen,以避免最终副本。

还要注意,你可以对输入数组做同样的事情。只要确保他们的类double(使用mxIsDouble),或者事情可能会发生可怕的错误... :)

[免责声明:我没有编译此代码,但我写了类似的代码。请让我知道,如果我错误键入了一些东西!]