2

我在使用 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是矩阵的行数。

4

1 回答 1

1

看看数学:dcor(X, Y)确实

  1. X单独(那些A_kl)和Y单独(那些B_kl)计算昂贵的东西
  2. 用 1) 和 2) 的结果做一些便宜的事情

当您dcor使用数据中的每个组合(对)行进行调用时,第一个昂贵的步骤将被一遍又一遍地调用:对于每一行,A_kn计算相同的总2*n次数(或者n如果您按照建议使用更智能的双循环,则为次数.) 虽然你真的需要它来计算一次。

结论:编写自己的算法会更好:

  1. 对于每一行数据,计算A_kl
  2. 编写一个执行函数最后一步的dcor函数:将A_klB_kl作为输入并返回距离相关性,
  3. outer按照建议通过或双循环调用该函数。

请注意,每个A_kn都是 700×700 维度的矩阵,您将拥有 5000 个矩阵,因此您可能必须选择在速度和内存使用之间取得平衡的次优算法。

于 2012-12-20T18:02:02.087 回答