如何从具有 运行 时间维度的特征矩阵创建行主 C 数组?

How to create a row-major C array from an Eigen matrix with run-time dimensions?

以下两个帖子很有帮助,但不是我需要的:

但是,我需要从 Eigen::MatrixXd 创建行主 C 数组(参见 ),并且我需要能够在 运行- 处指定维度时间。意思是,我正在制作一个接口,让我传递一个 Eigen::MatrixXd 以与其尺寸和预分配的目标 C 数组一起进行转换。

这有效,但主要是列,

void eigen_matrixXd_to_double_array(const Eigen::MatrixXd& evector, double* destination, uint32_t nrow, uint32_t ncol)
{
    Eigen::Map<Eigen::MatrixXd>(destination,nrow,ncol) = evector;
}

我想要这样的东西:

    void eigen_matrixXd_to_double_array(const Eigen::MatrixXd& evector, double* destination, uint32_t nrow, uint32_t ncol)
{
    Eigen::Map<Eigen::Matrix<double, nrow, ncol, Eigen::RowMajor>>(destination,nrow,ncol) = evector;
}

或者,

    void eigen_matrixXd_to_double_array(const Eigen::MatrixXd& evector, double* destination, uint32_t nrow, uint32_t ncol)
{
    Eigen::Map<Eigen::MatrixXd<Eigen::RowMajor>>(destination,nrow,ncol) = evector;
}

但这些都不起作用...

有什么建议吗?我是否可以使用编程维度进行行优先映射(意识到 C 接口的用户必须正确设置 dims)?

提前致谢...

你们非常亲密:

typedef Matrix<double,Dynamic,Dynamic,RowMajor> RowMajMat;
RowMajMat::Map(destination, evector.rows(), evector.cols()) = evector;

这里,RowMajMat::Map是返回一个Map<RowMajMat>的静态方法,所以也可以写成Map<RowMajMat>(destination, evector.rows(), evector.cols()).