【问题标题】:mapping c++ array to Eigen Matrix将 c++ 数组映射到特征矩阵
【发布时间】:2015-12-09 11:40:40
【问题描述】:

我目前正在尝试做的是从我的变量输入中获取数据,将其转换为 Eigen 矩阵,进行一些计算,然后将结果映射回 C++ 数组。

       void RBM::reconstruct(double *input, double *w) 
       {

              double *data = input;
              mexPrintf("\n");

           for (int j = 0; j < 6; j++){
             mexPrintf("%f", data[j]);
           }
                mexPrintf("\n");

            Map<MatrixXd> XX(data,6,6);
            MatrixXd resultEigen;
            double *result;

           Map<MatrixXd>( result, 6, 6 ) =   XX;
           resultEigen = XX.transpose();

           Map<MatrixXd>( result, resultEigen.rows(), resultEigen.cols() ) = resultEigen;
         }

上面的代码可以编译,但我得到(运行时错误)可能链接到访问冲突,我无法真正弄清楚问题出在哪里。感谢您的任何提示。

【问题讨论】:

  • result 未分配。
  • 你好 akakatak,我认为分配将动态完成。我对 Eigen Library 不是很熟悉。
  • 这是一个关于Eigen::Mapreference。它说'一个矩阵或向量表达式映射一个现有数组的数据。 表达式 表示该对象在 rum-time 中不保存任何数据。它只是一个包装器。 existing 意味着你必须准备一个数组,因为这个对象只是一个表达式
  • 我认为这与 MATLAB 无关!
  • 如果我没记错的话,你应该可以通过double *result[6*6];解决问题

标签: c++ eigen


【解决方案1】:

您误解了Eigen::Map 是什么。该映射包装了一个现有的内存块,并允许您在该块上使用 Eigen 功能。使用Eigen::Map Eigen 确实可以处理任何内存分配。这允许您操作来自其他库的对象中的数据,而无需来回复制。如上所述inthecomments,如果您将result 数组分配为double result[36];,程序应该可以正常运行。

【讨论】:

  • 刚刚尝试了双重结果[36],它实际上运行了。再次感谢 Avi Ginsburg 和所有其他人的帮助。
【解决方案2】:
#include <Eigen/Dense>
#include <kdl/jntarray.hpp>

Eigen::MatrixXd mat_1, mat_2;
KDL::JntArray arr;

mat_1 = arr.data.matrix() - mat_2 ;

这里将数组转换为矩阵

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2012-01-16
    • 1970-01-01
    • 2012-12-10
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多