使用RcppEigen将矩阵x3D转换为矩阵x3D

使用RcppEigen将矩阵x3D转换为矩阵x3D,r,casting,eigen,rcpp,R,Casting,Eigen,Rcpp,使用RcppEigen,我需要一个Matrix3d作为函数的参数。但这是不可能的,它只接受MatrixXd。我试着投下以下的角色,但这不起作用: Rcpp::List MtoAxisAngle(Eigen::MatrixXd & m) { Eigen::Matrix3d m3 = m.cast(); ...... 任何解决方案?您可以在初始化新矩阵时使用现有矩阵: // [[Rcpp::depends(RcppEigen)]] #include <RcppEigen.h&

使用
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))
*/
/[[Rcpp::depends(RcppEigen)]]
#包括
//[[Rcpp::导出]]
Rcpp::列表MtoAxisAngle(特征::矩阵D&m)
{
本征::矩阵x3d m3(m);
返回Rcpp::List::create(Rcpp::Named(“size”)=m3.size();
}
/***R
MtoAxisAngle(矩阵(1:9,3,3))
#MtoAxisAngle(矩阵(1:16,4,4))
*/

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

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

// [[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))
*/
/[[Rcpp::depends(RcppEigen)]]
#包括
//[[Rcpp::导出]]
Rcpp::列表MtoAxisAngle(特征::矩阵D&m)
{
本征::矩阵x3d m3(m);
返回Rcpp::List::create(Rcpp::Named(“size”)=m3.size();
}
/***R
MtoAxisAngle(矩阵(1:9,3,3))
#MtoAxisAngle(矩阵(1:16,4,4))
*/

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

尚未测试,但我认为我找到了解决方案:
Eigen::Matrix3d m3=Eigen::matrix(m)尚未测试,但我想我已经找到了一个解决方案:
Eigen::Matrix3d m3=Eigen::Matrix(m)