【问题标题】:Pass C++ Eigen matrix to Matlab mex output将 C++ 特征矩阵传递给 Matlab mex 输出
【发布时间】:2017-08-27 01:38:00
【问题描述】:

如何将Eigen Matrix 作为 Matlab 输出参数传递?

我从[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 会关闭。

【问题讨论】:

  • 您无法将Eigen Matrix 放入Matlab。您可以做的是使用Eigen 进行大量计算并使用基础数据创建一个对象,Matlab 可以理解并将其添加到plhs

标签: c++ matlab matrix eigen


【解决方案1】:

您需要先分配输出的 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

它的作用是创建一个特征矩阵 (map),其中包含 MATLAB 数组 (plhs[0]) 作为数据。当你写入它时,你实际上是在写入 MATLAB 数组。

请注意,您可以在进行 Eigen 计算之前创建此地图,并使用它而不是 resultEigen,以避免最终复制。

还请注意,您可以对输入数组执行完全相同的操作。只要确保它们属于double 类(使用mxIsDouble),否则事情可能会出现可怕的错误...... :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    相关资源
    最近更新 更多