将Eigen :: VectorXd展平为Eigen :: MatrixXd

时间:2017-11-02 23:58:20

标签: c++ eigen

假设我有一个6维Eigen::VectorXd

Eigen::VectorXd flat;
flat.resize(6);
flat << 1,2,3,4,5,6;

我想将其展平为2x3维Eigen::MatrixXd

1,2,3,
4,5,6

如何最有效地完成这项工作?

2 个答案:

答案 0 :(得分:1)

不确定效率,但这可行:

Eigen::Map<Eigen::MatrixXd> M(flat.data(), 3, 2);
Eigen::MatrixXd M2(M.transpose());

您的矩阵M2是所需的矩阵。

答案 1 :(得分:1)

更直接的变体(内部,cantordust的答案归结为相同):

typedef Matrix<double,Dynamic,Dynamic,RowMajor> RowMatrixXd;
MatrixXd M = RowMatrixXd::Map(flat.data(), 2, 3);