在r中向量和矩阵之间转换相关性的最快方法是什么?

时间:2019-03-28 00:10:31

标签: r parallel-processing correlation

我试图找到一种快速的方法来计算值向量和矩阵之间的相关性。转置数据后,我有一个具有200行和40万观察值的数据框。我需要在每列和每隔一列之间找到cor。

我的代码在下面,但是太慢了。任何人都可以提出更快的方法。

for(i in 1:400000){
      x=cor(trainDataNew[,i],trainDataNew[,-i])
}

您不需要我的数据即可执行此操作。您可以创建如下所示的随机数据。

norm1 <- rnorm(1000)
norm2 <- rnorm(1000)
norm3 <- rnorm(1000)
as.data.frame(cbind(norm1,norm2,norm3))

1 个答案:

答案 0 :(得分:2)

怎么了

cc <- cor(trainDataNew)

如果只需要下部三角形,则可以使用

cc2 <- cc[lower.tri(cc,diag=FALSE)]

This blog post声称在大约一分钟内完成了类似大小(略小)的问题。他们的方法在HiClimR::fastCor中实现。

library(HiClimR)
system.time(cc <- fastCor(dd, nSplit = 10, 
        upperTri = TRUE, verbose = TRUE,
        optBLAS=TRUE))

我还没有开始工作(保持内存不足),但是您可能会遇到更好的运气。您还应该考虑将R链接到优化的BLAS,例如有关MacOS,请参见here

有人here报告了并行版本(代码为here,以及一些分叉版本)