【问题标题】:What is the fastest way to convert correlation between a vector and a matrix in r?在r中转换向量和矩阵之间相关性的最快方法是什么?
【发布时间】:2019-08-18 16:14:36
【问题描述】:

我试图找到一种快速的方法来计算值向量和矩阵之间的相关性。转置数据后,我有一个包含 200 行和 400,000 个观察值的数据框。我需要找到每列和其他列之间的 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))

【问题讨论】:

    标签: r parallel-processing correlation


    【解决方案1】:

    怎么了

    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,以及一些分叉版本)

    【讨论】:

    • 我有一个 400,000 列的数据框。这将构成一个 400,000 列乘以 400,000 行的矩阵。我会用完内存。我刚刚用 50,000 列运行 cor 并得到错误:无法分配大小为 18.6 Gb 的向量
    • 您的意思是您不需要存储这些值?您会在循环中即时使用它们吗?
    猜你喜欢
    • 2017-02-12
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多