我正在嘗試爲我的數據創建一個新的距離函數。但是,與stats包的dist函數相比,我的代碼的性能非常低。例如,查看歐幾里得距離的結果:在R中優化我自己的距離函數
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
我不會使用歐幾里得距離。例如,我正在開發一個新的,使用一些特定於我的數據的統計信息,比代理包的數據更加複雜。數據集中有數百個變量和數千個示例(行)。不能等待幾個小時來計算距離。
我已經嘗試使用外與應用的另一個代碼。它比兩個循環更快,但仍然非常慢。任何人都可以提出任何建議嗎?
除非您使用一些全新的距離度量標準,否則您可能會更好地探索維基百科。在R和/或C中有現有代碼的度量函數有很多。您的距離函數實際上是時間瓶頸嗎?在選擇將其應用於數據集的方法之前,也應該確定這一點。 –