首页 > 解决方案 > 如何使交叉产品更快

问题描述

获得 40,000 x 1,000 矩阵的叉积需要(在我的 MBP 上,配备 2.9 GHz Intel Core i7 和 16 GB 内存)超过 20 秒:

> system.time(a <- crossprod(matrix(pi,40000,1000)))
   user  system elapsed 
 23.808   0.139  24.001 

有没有办法让它更快?谢谢你的帮助。

标签: r

解决方案


通过更改代码?基本上没有。crossprod直接调用编译后的代码,你将很难找到任何性能提升,而且你发现的任何东西都会很小。

(除非有情有可原 - 你的矩阵有多密集?如果你有很多 0,那么使用稀疏矩阵可能会有所帮助。我还假设你的矩阵不仅仅是一个常数矩阵,就像你的例子一样。)

您还可以使用 Microsoft 的 Revolution R Open,它被编译为使用不同的 BLAS,或者使用更优化的 BLAS 自己编译 R。这个链接有很好的细节。对于纯线性代数运算,这可能会产生相当大的影响。该站点显示了矩阵乘法、cholesky 分解等的数量级加速。


推荐阅读