外部功能问题

时间:2012-12-20 13:24:37

标签: performance r

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

1 个答案:

答案 0 :(得分:1)

看看数学:dcor(X, Y)

  1. 仅凭X(仅A_kl}和Y B_kl计算一些昂贵的东西(dcor}
  2. 用1)和2)
  3. 的结果做一些便宜的事情

    当您使用数据中的每个组合(对)行调用A_kn时,会反复调用第一个昂贵的步骤:对于每一行,计算相同的2*n总计n次(或A_kl次,如果你按照建议使用更智能的双循环。)虽然你真的需要它来计算一次。

    结论:你将方式更好地编写自己的算法:

    1. 对于您的每一行数据,请计算dcor
    2. 编写一个执行A_kl函数最后一步的函数:将B_klouter作为输入并返回距离相关性,
    3. 按照建议通过A_kn或双循环调用该函数。
    4. 请注意,每个{{1}}是一个尺寸为700 x 700的矩阵,您将有5000个,因此您可能需要选择一个在速度和内存使用之间取得平衡的次优算法。 / p>