使用RcppEigen将MatrixXd转换为Matrix3d

时间:2018-08-27 10:00:33

标签: r casting eigen rcpp

对于RcppEigen,我需要一个Matrix3d作为函数的参数。但这是不可能的,它仅接受MatrixXd。我试图进行如下铸造,但这行不通:

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

任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

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

// [[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,因此您应事先检查大小是否正确。