Eigen3:将动态矩阵转换为静态矩阵

问题描述

是否可以将动态矩阵转换为静态矩阵,如果是,最佳解决方案是什么? 示例:

Eigen::MatrixXd a = Eigen::Matrixxd::Zero(4,4);

Eigen::Matrix<double,a.rows(),a.cols()> b = a; //?

干杯!

解决方法

来自documentation

Matrix 的三个必选模板参数是: 矩阵

RowsAtCompileTime 和 ColsAtCompileTime 是编译时已知的 > 矩阵的行数和列数

当您使用 Eigen::MatrixXd 时,

RowsAtCompileTime 和 ColsAtCompileTime 模板参数可以采用特殊值 Dynamic 表示大小在编译时未知,因此必须作为运行时变量处理

鉴于编译时 a 的大小未知,您无法获得 a.rows() 的值。

鉴于您在编译时知道 a 的大小,您应该使用 Eigen::Matrix 而不是 Eigen::MatrixXd。但是,如果您不知道 a.rows()a.cols(),则必须将 b 声明为 Eigen::MatrixXd。您不能使用 Eigen::Matrix