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

Eigen 如何从具有运行时维度的特征矩阵创建行主C数组?,eigen,Eigen,以下两个帖子非常有用,但不是我所需要的: 但是,我需要从一个Eigen::MatrixXd创建一个行主C数组(请参见),并且我需要能够在运行时指定维度。这意味着,我正在制作一个接口,让我传递一个Eigen::MatrixXd,并将其与维度和预分配的目标C数组一起转换 这行得通,但是主要的专栏 void eigen_matrixXd_to_double_array(const Eigen::MatrixXd& evector, double* destination, uint32

以下两个帖子非常有用,但不是我所需要的:

但是,我需要从一个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-eigend\u矩阵到双数组(const-eigend::matrixXd&evector,double*destination,uint32\u nrow,uint32\u ncol)
{
本征::地图(目的地,nrow,ncol)=电子元件;
}
我想要像这样的东西:

    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-eigend\u矩阵到双数组(const-eigend::matrixXd&evector,double*destination,uint32\u nrow,uint32\u ncol)
{
本征::地图(目的地,nrow,ncol)=电子元件;
}
或者

void-eigend\u矩阵到双数组(const-eigend::matrixXd&evector,double*destination,uint32\u nrow,uint32\u ncol)
{
本征::地图(目的地,nrow,ncol)=电子元件;
}
但这两种方法都不管用

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

提前感谢…

您非常接近:

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

在这里,
RowMajMat::Map
是一个静态方法,返回一个
Map
,因此您还可以编写
Map(destination,evector.rows(),evector.cols())

@ggael,这很有效!谢谢你的帮助。对于其他noob,这里有一个可能有助于复制/粘贴的轻微调整,typedef-Eigen::Matrix-RowMajMat;
typedef Matrix<double,Dynamic,Dynamic,RowMajor> RowMajMat;
RowMajMat::Map(destination, evector.rows(), evector.cols()) = evector;