将行主数组映射到列专用的特征矩阵

时间:2016-12-06 10:23:30

标签: eigen eigen3

我想从C型数组映射到Column majored Eigen矩阵。

映射本身使用RowMajor类型

所以我试过

std::vector<double> a(9);
double *p= a.data();
Eigen::MatrixXd M=Eigen::Map<Eigen::Matrix<double, 3, 3, Eigen::RowMajor>>(p)

我得到了我的预期(M.data()的顺序),但是,如果模板中的维度(3)在编译时不可知,则此方法不起作用...任何解决方案?

1 个答案:

答案 0 :(得分:3)

我假设您写道:

Eigen::MatrixXd M=Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(p);

这并不能让地图知道尺寸应该是什么。你必须在构造函数中添加它:

std::vector<double> a{1,2,3,4,5,6,7,8,9};
double *p = a.data();
std::cout << Eigen::Map<Eigen::Matrix<double, 3, 3, Eigen::RowMajor>>(p) << "\n\n";
std::cout << Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(p, 3, 3) << "\n\n";

std::cout << Eigen::Map<Eigen::Matrix<double, 3, 3, Eigen::ColMajor>>(p) << "\n\n";
std::cout << Eigen::Map<Eigen::MatrixXd>(p, 3, 3) << "\n\n";