2

私はRの使用にかなり慣れていません。関数dcorごとに行列の行ペアで(距離相関)を使用しようとしていouterます。私のコードは小さなテスト マトリックス (100x100) で動作しますが、実際のテスト マトリックス (5000 x 700) に適用しようとしましたが、結果が得られずに 1 週​​間以上かかりました。それは正常ですか?結果を早く出すためのアドバイスはありますか?

コードは次のとおりです。

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 に答える