以下两篇文章非常有用,但并不完全符合我的要求:
但是,我需要从Eigen :: MatrixXd创建一个行主C数组(参见2),我需要能够在运行时指定维度。意思是,我制作了一个接口,让我传递一个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)?
提前致谢...
答案 0 :(得分:2)
你非常接近:
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())
。