R语言技巧Rcpp与Eigen库之间的相互转换
程序员文章站
2022-06-24 11:34:37
当我们在使用rcpp时,进行矩阵运算最简单的是使用eigen库进行相关操作,可以很轻松地讲r中向量化与矩阵化的思想应用到c++代码上,从而对代码进行加速。可参考前面的博客:利用rcppeigen进行矩...
当我们在使用rcpp时,进行矩阵运算最简单的是使用eigen
库进行相关操作,可以很轻松地讲r中向量化与矩阵化的思想应用到c++代码上,从而对代码进行加速。可参考前面的博客:利用rcppeigen进行矩阵运算。
但有时,我们却必须使用rcpp
进行dataframe,list等对象格式的处理。或者如果我们涉及到缺失值的处理,也需要使用rcpp
中的函数来做。
所以,如何在两种矩阵或向量格式,numericvector/matrix与vectorxd/matrixxd之间相互转化就变得非常重要。
我们可以首先使用eigen
库中的vectorxd/matrixxd对矩阵进行运算,然后再转化为rcpp
中的numericvector/matrix,继而我们便可使用rcpp
中的函数了。
具体做法其实参考了下面的文章:
具体解决方法
以一个最简单的numericmatrix转化为matrixxd格式为例:
// [[rcpp::depends(rcppeigen)]] #include <rcpp.h> #include <rcppeigen.h> using namespace rcpp; using eigen::map; using eigen::matrixxd; using rcpp::as; // [[rcpp::export]] matrixxd test(numericmatrix aa) { map<eigen::matrixxd> a(as<map<eigen::matrixxd> >(aa)); return(a); }
我们将对象aa
变为了对象a
,如果之后需要进行变换时,需要将两者进行替换即可。
以上就是r语言技巧rcpp与eigen库之间的相互转换的详细内容,更多关于rcpp与eigen库之间的转换的资料请关注其它相关文章!