将 C++ 数组映射到特征矩阵
mapping c++ array to Eigen Matrix
我目前正在尝试做的是从我的变量输入中获取数据,将其转换为特征矩阵,进行一些计算,然后将结果映射回 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;
}
上面的代码可以编译,但我得到(运行 时间错误)可能 link 访问冲突,我无法真正弄清楚问题出在哪里。感谢您的任何提示。
你误解了Eigen::Map
是什么。该映射包装了一个现有的内存块,并允许您在该块上使用 Eigens 功能。使用 Eigen::Map
Eigen 会处理任何内存分配。这使您无需来回复制即可操作其他库中对象中的数据。如前所述 ,如果您将 result
数组分配为 double result[36];
,程序应该 运行 没问题。
#include <Eigen/Dense>
#include <kdl/jntarray.hpp>
Eigen::MatrixXd mat_1, mat_2;
KDL::JntArray arr;
mat_1 = arr.data.matrix() - mat_2 ;
这里数组转矩阵
我目前正在尝试做的是从我的变量输入中获取数据,将其转换为特征矩阵,进行一些计算,然后将结果映射回 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;
}
上面的代码可以编译,但我得到(运行 时间错误)可能 link 访问冲突,我无法真正弄清楚问题出在哪里。感谢您的任何提示。
你误解了Eigen::Map
是什么。该映射包装了一个现有的内存块,并允许您在该块上使用 Eigens 功能。使用 Eigen::Map
Eigen 会处理任何内存分配。这使您无需来回复制即可操作其他库中对象中的数据。如前所述 result
数组分配为 double result[36];
,程序应该 运行 没问题。
#include <Eigen/Dense>
#include <kdl/jntarray.hpp>
Eigen::MatrixXd mat_1, mat_2;
KDL::JntArray arr;
mat_1 = arr.data.matrix() - mat_2 ;
这里数组转矩阵