使用 RcppEigen 将 MatrixXd 转换为 Matrix3d

Casting a MatrixXd to a Matrix3d with RcppEigen

对于RcppEigen,我需要一个Matrix3d作为函数的参数。但这是不可能的,它只接受MatrixXd。我试过按如下方式进行转换,但这不起作用:

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

有什么解决办法吗?

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

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