【问题标题】:Un-flatten Eigen::VectorXd to Eigen::MatrixXd将 Eigen::VectorXd 展平为 Eigen::MatrixXd
【发布时间】:2017-11-02 23:58:19
【问题描述】:

假设我有一个 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

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

【问题讨论】:

    标签: c++ eigen


    【解决方案1】:

    不确定效率,但这会起作用:

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

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

    【讨论】:

    • 将其映射为行矩阵,然后复制会不那么麻烦。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2023-01-29
      • 2020-09-16
      相关资源
      最近更新 更多