2016-09-16 18 views
0

R:对于对称密集矩阵乘法,任何比“tcrossprod”更快的R函数?

x = matrix(rnorm(1000000), nrow = 5000) 

我想计算矩阵乘法,其转:x %*% t(x)

谷歌搜索后,我发现上面做的可能更快的方法是

tcrossprod(x) 

而且所用的时间是

user system elapsed 
2.975 0.000 2.960 

是否有任何其他R-功能,可以做任务的速度比以上功能?

+0

你有没有像你的例子中的所有双打?我很少有这样的矩阵,没有零点或整数。时间显着增加与您显示的格式。 –

+0

@PierreLafortune。我正在处理的实际矩阵是由整数和分数组成的。输出矩阵是一个协方差矩阵。 – Janak

+0

@ZheyuanLi我想用r函数“eigen”来计算特征值和向量。 – Janak

回答

3

不,在R级这已经是最快的了。但在内部它称为3级BLAS例程dsyrk。所以如果你能有一个高性能的BLAS库,这将会快得多。尝试连接OpenBLAS您R.

链接一个BLAS库不需要重建R.你可能对我的问题linking R to BLAS library读的概述,其中包含几个环节向您展示如何设置别名,然后不同的BLAS之间切换机器上的库。

或者,您可以阅读我非常长的问题并回答Without root access, run R with tuned BLAS when it is linked with reference BLAS,它提供了各种方法来使用外部BLAS库,即使R链接到引用BLAS库。


作为一个侧面说明,对于尺寸m * n矩阵,dsyrk有FLOP计数n * m^2(注意,这是tcrossprod计算成本。对于crossprodm * n^2。)

你有m = 5000n = 200和计算需要2.96s。因此,计算速度为:(200 * 5000^2/2.96) * 1e-9 = 1.68 GFLOPs。那么,这是一个普通的性能水平,所以目前你肯定使用了参考BLAS。使用OpenBLAS时,性能可能会达到10 GFLOPs或更高,具体取决于您的CPU。祝你好运!

+0

好的。感谢您的信息。 – Janak