首页 > 解决方案 > 使用 RcppEigen 将 MatrixXd 转换为 Matrix3d

问题描述

有了RcppEigen,我需要 aMatrix3d作为函数的参数。但这是不可能的,它只接受MatrixXd. 我尝试按如下方式进行转换,但这不起作用:

Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
  Eigen::Matrix3d m3 = m.cast();
  ......

有什么解决办法吗?

标签: rcastingeigenrcpp

解决方案


您可以在新矩阵的初始化中使用现有矩阵:

// [[Rcpp::depends(RcppEigen)]]
#include <RcppEigen.h>

// [[Rcpp::export]]
Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m)
{
  Eigen::Matrix3d m3(m);
  return Rcpp::List::create(Rcpp::Named("size") = m3.size());
}


/*** R
MtoAxisAngle(matrix(1:9,3,3))
# MtoAxisAngle(matrix(1:16,4,4))
*/

由于使用不合格矩阵的调用会杀死 R,因此您应该事先检查大小是否正确。


推荐阅读