概述
本文的内容主要来自这个回答和一些经验。
R自带的矩阵运算方法速度不算太快,在做两个大矩阵相乘时显得尤为明显。提高R矩阵乘法的方法有多种,例如
- 使用base包自带的crossprod和tcrossprod函数,他们分别相当于 t(x) %*% y和x %*% t(y),这个方法能够略微提高运算速度;
- 使用Rcpp编译的c++函数(调用一些库例如Eigen、Armadillo)提高运算效率;
- 更改R的底层矩阵运算库,使用更为高效的库。例如计算机是Intel的处理器可以使用他们家的MKL库(使用MKL编译R),或者使用针对所有处理器开源的OpenBLAS库。这个方法最为彻底,能够全方位地提升R的矩阵运算速度(不只是乘法),但是需要一定的动手能力;
- 使用GPU进行计算。
其中,2、3、4方法可以结合起来,分别从软件、软件底层、硬件上来提升速度,可以极大地加快运算速度。
Rcpp方法的操作步骤
本文具体展示了第二个方法。因为这个方法简单,但是能够极大地提高矩阵乘法速度。
第一步,在R里面安装Rcpp,RcppArmadillo,RcppEigen三个包,同时安装microbenchmark包用以之后的速度测试;如果是Windows环境,需要安装Rtool工具以编译Rcpp文件,安装的时候务必勾选上“Add rtools to system PATH”,否则无法运行。
第二步,在工作目录下新建“matrix_multiplication.cpp”文件,里面粘贴如下内容,并保存关