我在使用 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_kl
dcor
函数:将A_kl
和B_kl
作为输入并返回距离相关性,outer
按照建议通过或双循环调用该函数。请注意,每个A_kn
都是 700×700 维度的矩阵,您将拥有 5000 个矩阵,因此您可能必须选择在速度和内存使用之间取得平衡的次优算法。