我試圖找到距離候選集最小距離的點。 Z是矩陣,行是維度,列表示點。計算點間距離,然後用最小距離和距離記錄點。以下是代碼片段。該代碼適用於小維度和小組點。但是,對於大型數據集(N = 100萬個數據點,維數也很高),需要很長時間。有沒有一種有效的方法?Matlab:幫助尋找最小距離
2
A
回答
3
我建議你用pdist
來爲你做重擔。該函數將計算陣列中每兩個點之間的成對距離。所產生的載體,必須投入才能使用squareform
找到每一對極小值矩陣形式:
N = 100;
Z = rand(2,N); % each column is a 2-dimensional point
% pdist assumes that the second index corresponds to dimensions
% so we need to transpose inside pdist()
distmatrix = squareform(pdist(Z.','euclidean')); % output is [N, N] in size
% set diagonal values to infinity to avoid getting 0 self-distance as minimum
distmatrix = distmatrix + diag(inf(1,size(distmatrix,1)));
mindists = min(distmatrix,[],2); % find the minimum for each row
sum_dist = sum(mindists); % sum of minimal distance between each pair of points
此計算每對兩次,但我認爲這是對你的最初實現真實的。
想法是pdist
計算其輸入列之間的成對距離。所以我們把Z
的轉置放入pdist
。由於全部輸出總是一個零對角線的方形矩陣,所以實現了pdist
,使得它只在向量中返回高於對角線的值。因此需要致電squareform
以獲得適當的距離矩陣。然後,這個矩陣的行最小值必須找到,但首先我們必須排除對角線中的零。我很懶,所以我把inf
插入對角線,以確保最小值在別處。最後,我們只需要總結最小的距離。
+0
@SrishtiM雖然聽起來很有趣,但不幸的是我對這個話題一無所知,所以我不能幫你:) –
相關問題
- 1. 找到最小距離
- 2. 尋找最短距離覆蓋最小單元數的算法
- 3. 尋找最近的駕車距離
- 4. 尋找距離最近的號碼?
- 5. 尋找距離最近的向量點
- 6. 尋找與水的最短距離
- 7. 使用MatLab找到最大距離
- 8. 最小距離
- 9. C++ - 尋找「幫助」
- 10. 使用熊貓尋找每一行的最小距離
- 11. 降低成本computaional在尋找最小距離
- 12. 找到最長距離的最小值
- 13. 在MATLAB中找到點和曲線之間的最小距離
- 14. 與最小距離
- 15. 的最小距離
- 16. 尋找最小值的Matlab代碼
- 17. 找到距離地點最小總距離的點的算法
- 18. 找到xyz之間的最小距離
- 19. 幫助尋找路徑
- 20. 尋找課程幫助
- 21. 的preg_match幫助尋找數
- 22. 尋找Scaladoc幫助,reduceLeft
- 23. MBRContains距離位置的距離幫助MySQL
- 24. 需要幫助瞭解Levenshtein距離
- 25. 需要幫助計算地理距離
- 26. 更改ViewPager最小距離
- 27. 最小海明距離
- 28. 尋找有效數字的距離
- 29. 查找離開路線集的最小距離
- 30. 尋找最小和最大
如果你有足夠的內存和必要的工具箱,請看['pdist'](http://www.mathworks.com/help/stats/pdist.html)。 –
看看我鏈接到的文檔,似乎'pdist'的輸出將是一個'[N,N-1]'大小的矩陣:每個點相對於其他點的距離。你只需要爲每一行找到這個矩陣的最小值。換句話說,'min(pdist(Z,'euclidean'),[],2)'應該是每個點的最小最近鄰距離,'sum()'ming這個給你你所需要的。當然,你需要檢查這個到你的正確實施,但它應該是非常簡單的。 –
這是一個矢量,因爲你錯過了我的評論的最後一部分:你需要使用sum()對該矢量進行總結..... –