动机:加速加速加速已有R code中的线性运算,包括矩阵运算;
方法:(1)如果是因为循环次数太多,可采用并行运算的处理方式,具体操作做法可参考Let’s be Faster and more Parallel in R with doParallel package | R-bloggers的做法;但是该方法比较耗CPU和内存;如果内存和CPU足够富有的话,不失为一种不错的选择;
(2)OpenBLAS,MKL等等类似的方法,可参考Faster BLAS in R | Brett Klamer;Quick Linking Intel® MKL BLAS, LAPACK to R等等;(这部分内容有待进一步学习);
(3)将R code直接用改写成C/C++代码,或者利用Rcpp和RcppEigen将R的便利性与C++中Eigen对矩阵高速运算的优点结合起来,从而达到加速的目的,这也是本文重点介绍的一种方法;
实际操作:(以参考【1】41 Rcpp介绍 | R语言教程中“41.2.3 用sourceCpp()转换C++源文件中的程序”的方法作为链接R和Eigen的做法为例)
step1:创建两个文件,分别是保存C++代码的C++源文件和调用C++源文件的R代码
(1)保存C++代码的C++源文件(比如:MatrixOperationR.cpp)//当时这是本文中的示例文件名而已,你可以命名为你想用的任何名字;
// [[Rcpp::depends(RcppEigen)]]
#include <RcppEigen.h>
#include <Rcpp.h>
using namespace std;
using namespace Eigen;
using Eigen::Map;
using Eigen::MatrixXd;
using Eigen::VectorXd;
using Eigen::Transpose;
using Rcpp::wrap;
using Rcpp::Named;
using Eigen::Lower;
using Eigen::LLT;
using Eigen::HouseholderQR;
// [[Rcpp::export]]
SEXP trans_tX_Cpp(const Eigen::Map<Eigen::MatrixXd> A){