データの新しい距離関数を作成しようとしています。ただし、statsパッケージのdist関数と比較すると、コードのパフォーマンスは非常に遅くなります。たとえば、ユークリッド距離の結果を参照してください。
mydist = function (x){
euclidean = function (a, b){
sqrt(sum((a-b)^2))
}
distances = matrix(0, nrow=nrow(x), ncol=nrow(x))
for (i in 1:nrow(x))
for (j in 1:(i-1)){ # <- corrected this
if (j > 0){
distances[i,j]=euclidean(x[i,], x[j,])
distances[j,i]=distances[i,j]
}
}
distances
}
m=matrix(1:800, ncol=2)
system.time(as.dist(mydist(m)))
usuário sistema decorrido
0.714 0.000 0.716 # <- updated values with corrected version
system.time(dist(m))
usuário sistema decorrido
0.004 0.000 0.002
ユークリッド距離は使用しません。たとえば、プロキシパッケージの統計とは異なり、データに固有の統計を使用して、はるかに複雑な新しい統計を開発しています。データセットには数百の変数と数千の例(行)があります。距離を計算するためだけに数時間待つことはできません。
私はapplyでouterを使用して別のコードを試しました。2つのループよりも高速でしたが、それでも非常に低速でした。誰かが何か提案できますか?