私は候補セットから最小距離にある点を見つけようとしています。 Zは、行が次元であり、列が点を示す行列です。点間距離を計算し、最小距離とその距離でポイントを記録する。以下はコードスニペットです。このコードは、小さな次元と小さな点セットでうまく機能します。しかし、大きなデータセット(N = 100万データポイントおよび次元も高い)には長い時間がかかります。効率的な方法はありますか?Matlab:最小距離を見つける手助け
2
A
答えて
3
あなたは重い荷を降ろすためにpdist
を使用することをお勧めします。この関数は、配列内の2点間のペア間の距離を計算します。得られたベクターは、各ペアの最小値を見つけるために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
これを2回すべてのペアを計算し、私はこれはあなたの元の実装のための真のだと思います。
pdist
は、入力の列間のペアごとの距離を計算するという考え方です。そこで、Z
の転置をpdist
に入れます。完全な出力は常にゼロ対角の正方行列であるため、pdist
は、対角より上の値だけをベクトルに戻すように実装されています。適切な距離行列を得るには、squareform
への呼び出しが必要です。次に、この行列の行ごとの最小値を求める必要がありますが、まず対角線のゼロを除外しなければなりません。私は怠け者でしたので、最小値がどこかにあることを確認するために、inf
を対角に入れました。結局のところ、最小限の距離を合計するだけです。
+0
@SrishtiM興味深いとはいえ、残念ながら私はその件について何も知らないので、私はあなたを助けることができません:) –
関連する問題
- 1. MATLABの点と曲線の間の最小距離を見つけよう
- 2. 最小距離のサンプルの一意のペアを見つける
- 3. プロファイル間の最小距離を見つける
- 4. 表に最小距離を見つける
- 5. マトリックス+ matlabで距離dの近傍を見つけよう
- 6. dnaのリストのハミング距離が最小となるk-merを見つける
- 7. 場所からの最小総距離のポイントを見つけるアルゴリズム
- 8. 最も近い運転距離を見つける
- 9. 2本の3D線分の最短距離を見つける
- 10. 水と最短距離を見つける
- 11. Matlabが関数の最小値/最大値を見つける
- 12. MonoDevelop 2.4:dllを見つける手助け
- 13. スタックトレースバイトオフセットからソースコードラインを見つける手助けが必要
- 14. メモリリークを見つける手助け(一般的なヒント)
- 15. Pythonでcsvの項目を見つける手助け
- 16. 最小ハミング距離
- 17. ポイント間の最短距離を見つける最速の方法
- 18. MATLAB:ビデオから最小ピクセル値を見つける
- 19. matlabの最小要素のインデックスを見つける
- 20. 距離行列の5つの最も近いサンプルのインデックスを見つける
- 21. Pythonで2つのgpsポイント間の距離を見つける
- 22. 2つのデバイス間の距離を見つける
- 23. 固定長ヘックスのリスト内で最小のハミング距離を見つける最も速い方法
- 24. CSSのホバーアニメーションを見つけ出す手助けが必要
- 25. iPhoneのLocal MeasurementSystemを使用して距離を見つける
- 26. 距離の和を最小にするために平面内のn点間の点を見つけるアルゴリズム
- 27. Pythonリスト内のポイント間の最短距離を見つけるクリーナーメソッド?
- 28. レイヤ内の1つのポリゴンから他のポリゴンまでの最小距離を見つけますか?
- 29. 有効な番号からの距離を見つける
- 30. Kmでスウィフトで距離を見つける
十分なメモリと必要なツールボックスがある場合は、['pdist'](http://www.mathworks.com/help/stats/pdist.html)を参照してください。 –
私がリンクしているドキュメントを見ると、 'pdist'の出力は' [N、N-1] 'サイズの行列になります:各点は他のすべての点との距離です。各行に対してこの行列の最小値を求めるだけでよい。言い換えれば、 'min(pdist(Z、 'euclidean')、[]、2)'は各点の最小最近傍距離でなければならず、 'sum() 'を使うと必要なものが得られます。もちろん、これをあなたの適切な実装にチェックする必要がありますが、それは非常に簡単です。 –
あなたは私のコメントの最後の部分を逃したのでベクトルです:そのベクトルに 'sum()'を使用して合計する必要があります..... –