代码之家  ›  专栏  ›  技术社区  ›  Stéphane Laurent

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

  •  0
  • Stéphane Laurent  · 技术社区  · 7 年前

    RcppEigen ,我需要一个 Matrix3d 作为函数的参数。但这是不可能的,它只接受 MatrixXd . 我试着投了以下几张,但没用:

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

    有什么解决办法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ralf Stubner    7 年前

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

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