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

Eigen3: Cast Dynamic Matrix to Static Matrix

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

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

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

干杯!

来自 documentation.

The three mandatory template parameters of Matrix are: Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>.

RowsAtCompileTime and ColsAtCompileTime are the number of rows and columns of the > matrix as known at compile time

当您使用 Eigen::MatrixXd,

The RowsAtCompileTime and ColsAtCompileTime template parameters can take the special value Dynamic which indicates that the size is unknown at compile time, so must be handled as a run-time variable

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

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