我有一個很大的輸入矩陣(4000x10000)。我使用dist()
來計算它的歐幾里德距離矩陣(大約需要5個小時)。
我需要爲另一行(對於4001x10000矩陣)計算「相同」矩陣的距離矩陣。在不重新計算整個矩陣的情況下確定距離矩陣的最快方法是什麼?重新計算距離矩陣
重新計算距離矩陣
回答
我假設你的額外的行意味着一個額外的點。如果它意味着一個額外的變量/維度,它會要求一個不同的答案。
首先,對於矩陣的歐氏距離,我建議使用fields
包中的rdist
函數。它是用Fortran編寫的,比dist
函數快很多。它返回一個matrix
而不是dist
對象,但您可以始終使用as.matrix
和as.dist
從一個到另一個。
這裏是(比你小)樣本數據
num.points <- 400
num.vars <- 1000
original.points <- matrix(runif(num.points * num.vars),
nrow = num.points, ncol = num.vars)
你已經計算出的距離矩陣:
d0 <- rdist(original.points)
的額外點(S),你只需要計算距離額外點之間以及額外點與原始點之間的距離。我將使用兩個加分證明的解決方案是由一般到任意數量的加分:
extra.points <- matrix(runif(2 * num.vars), nrow = 2)
inner.dist <- rdist(extra.points)
outer.dist <- rdist(extra.points, original.points)
這樣你就可以將它們綁定到你的更大的距離矩陣:
d1 <- rbind(cbind(d0, t(outer.dist)),
cbind(outer.dist, inner.dist))
讓我們來看看它匹配什麼一個完整的,長期rerun會產生:
d2 <- rdist(rbind(original.points, extra.points))
identical(d1, d2)
# [1] TRUE
我試過用: mydist <-dist(original.points) mydist < - as.matrix(mydist) euc.dist <-function(x){ sqrt(sum((extra.point - x)^ 2)) } extra.dist <-apply(original.points,1,euc.dist) rbind(mydist,extra.dist) 我的問題是將多餘的行綁定到類「dist」 – sztup
距離矩陣是一個方形矩陣。您最後只需添加一行,您還應該在末尾添加一列,並且右下角的值應爲零(額外點與其自身之間的距離)。但請閱讀我的解決方案... – flodel
- 1. 加速R算法來計算Hellinger距離的距離矩陣
- 2. Javascript矩陣和距離計算
- 3. 計算多維矩陣中的距離
- 4. 從距離矩陣計算親和力矩陣
- 5. 計算給定行向量矩陣的距離矩陣
- 6. 距離矩陣
- 7. 重複距離矩陣計算的高效(記憶方式)功能和超大距離矩陣的分塊
- 8. 矩陣,距離,javascript
- 9. 機器人,兩地之間的計算距離,谷歌距離矩陣
- 10. python hcluster,距離矩陣和濃縮距離矩陣
- 11. 距離矩陣的近似估計
- 12. 哪個SciPy稀疏矩陣類最適合計算距離矩陣?
- 13. 計算距離
- 14. 計算距離
- 15. 距離計算
- 16. 計算距離
- 17. 計算距離
- 18. 計算距離
- 19. 計算距離
- 20. 計算距離
- 21. 計算距離
- 22. 計算距離
- 23. 計算距離
- 24. 計算距離
- 25. 堪培拉距離矩陣手動計算
- 26. CUDA,計算3D對象之間的距離矩陣
- 27. 從預先計算的距離矩陣繪製樹狀圖
- 28. 用numpy計算距離矩陣的更快方法是什麼?
- 29. 從x,y,z座標計算歐幾里得距離矩陣
- 30. pyspark計算稀疏向量的距離矩陣
你知道如何做,但不是在R或你不知道該怎麼做嗎? – carlosdc
額外的行是額外的點還是額外的變量/維度? – flodel