如何从具有 运行 时间维度的特征矩阵创建行主 C 数组?
How to create a row-major C array from an Eigen matrix with run-time dimensions?
以下两个帖子很有帮助,但不是我需要的:
- Convert Eigen Matrix to C array
但是,我需要从 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())
.
以下两个帖子很有帮助,但不是我需要的:
- Convert Eigen Matrix to C array
但是,我需要从 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())
.