我在使用 R 方面很新。我正在尝试按函数dcor对矩阵的行对使用(距离相关) 。outer我的代码适用于小型测试矩阵(100x100),但我尝试将它应用到真正的测试矩阵(5000 x 700)上,并且花了一个多星期才给我结果。正常吗?有什么建议可以更快地获得结果吗?
代码是:
library(energy)
outer (1:n, 1:n, FUN=Vectorize (function (i,j) dcor (a[i,], a[j,])))
n是矩阵的行数。
我在使用 R 方面很新。我正在尝试按函数dcor对矩阵的行对使用(距离相关) 。outer我的代码适用于小型测试矩阵(100x100),但我尝试将它应用到真正的测试矩阵(5000 x 700)上,并且花了一个多星期才给我结果。正常吗?有什么建议可以更快地获得结果吗?
代码是:
library(energy)
outer (1:n, 1:n, FUN=Vectorize (function (i,j) dcor (a[i,], a[j,])))
n是矩阵的行数。
看看数学:dcor(X, Y)确实
X单独(那些A_kl)和Y单独(那些B_kl)计算昂贵的东西当您dcor使用数据中的每个组合(对)行进行调用时,第一个昂贵的步骤将被一遍又一遍地调用:对于每一行,A_kn计算相同的总2*n次数(或者n如果您按照建议使用更智能的双循环,则为次数.) 虽然你真的需要它来计算一次。
结论:编写自己的算法会更好:
A_kldcor函数:将A_kl和B_kl作为输入并返回距离相关性,outer按照建议通过或双循环调用该函数。请注意,每个A_kn都是 700×700 维度的矩阵,您将拥有 5000 个矩阵,因此您可能必须选择在速度和内存使用之间取得平衡的次优算法。