5

2 つの行列/データ フレーム間の行のすべての組み合わせの距離測定を計算したいと思います。

結果は、最初の行列の行 i と 2 番目の行列の行 j に適用された関数によって得られる結果に対応するセル i,j を持つ行列になります。これは、サンプル関数を使用して、 for ループで何をしたいのかを示す例です。

x<-matrix(rnorm(30),10,3)  ## Example data
y<-matrix(rnorm(12),4,3)

results<-matrix(NA,nrow(x),nrow(y))

for (i in 1:nrow(x)){
  for (j in 1:nrow(y)){
    r1<-x[i,]
    r2<-y[j,]
    results[i,j]<-sum(r1*r2)  ## Example function
  }
}

実際には、数十万行の最初の行列、数百行の 2 番目の行列があり、計算したい関数は内積ではありません (次のように見える関数を選択した可能性があることに気付きました)。私がやりたいのは行列の乗算だけです)。実際、代用したい関数がいくつかあるので、さまざまな関数に一般化できるソリューションを見つけたいと思います。それについての 1 つの考え方は、行列の乗算をハイジャックして他の機能を実行したいということです。これを for ループで計算すると時間がかかりすぎて実用的ではありません。forループなしでこれを行う方法についてのヒントにとても感謝しています。

4

2 に答える 2

4
outer(1:nrow(x), 1:nrow(y), Vectorize(function(i, j) sum(x[i, ] * y[j, ])))
于 2012-05-25T18:52:47.530 に答える