我试图找到一种快速的方法来计算值向量和矩阵之间的相关性。转置数据后,我有一个具有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))
答案 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。