R语言技巧Rcpp与Eigen库之间的相互转换

当我们在使用Rcpp时,进行矩阵运算最简单的是使用Eigen库进行相关操作,可以很轻松地讲R中向量化与矩阵化的思想应用到C++代码上,从而对代码进行加速。可参考前面的博客:利用RcppEigen进行矩阵运算。
但有时,我们却必须使用Rcpp进行DataFrame,List等对象格式的处理。或者如果我们涉及到缺失值的处理,也需要使用Rcpp中的函数来做。
所以,如何在两种矩阵或向量格式,NumericVector/Matrix与VectorXd/MatrixXd之间相互转化就变得非常重要。
【R语言技巧Rcpp与Eigen库之间的相互转换】我们可以首先使用Eigen库中的VectorXd/MatrixXd对矩阵进行运算,然后再转化为Rcpp中的NumericVector/Matrix,继而我们便可使用Rcpp中的函数了。
具体做法其实参考了下面的文章:
An Introduction to RcppEigen
Converting between NumericVector/Matrix and VectorXd/MatrixXd in Rcpp(Eigen) to perform Cholesky solve
具体解决方法 以一个最简单的NumericMatrix转化为MatrixXd格式为例:

// [[Rcpp::depends(RcppEigen)]]#include #include using namespace Rcpp; using Eigen::Map; using Eigen::MatrixXd; using Rcpp::as; // [[Rcpp::export]]MatrixXd Test(NumericMatrix AA) {Map A(as >(AA)); return(A); }

我们将对象AA变为了对象A,如果之后需要进行变换时,需要将两者进行替换即可。
以上就是R语言技巧Rcpp与Eigen库之间的相互转换的详细内容,更多关于Rcpp与Eigen库之间的转换的资料请关注脚本之家其它相关文章!

    推荐阅读