후보 세트에서 최소 거리에있는 지점을 찾으려고합니다. Z는 행이 차원이고 행이 점을 나타내는 행렬입니다. 포인트 간 거리를 계산 한 다음 최소 거리와 거리로 포인트를 기록하십시오. 아래는 코드 스 니펫입니다. 이 코드는 작은 치수와 작은 점 집합에 대해서는 잘 작동합니다. 그러나 대용량 데이터 세트 (N = 1 백만 데이터 포인트 및 차원 또한 높음)에 대해서는 오랜 시간이 걸립니다. 효율적인 방법이 있습니까?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
에 넣습니다. 전체 출력은 항상 대각선이 0 인 정사각형 행렬이기 때문에 벡터에서 대각선 위의 값만 반환하도록 pdist
이 구현됩니다. 적절한 거리 매트릭스를 얻으려면 squareform
을 호출해야합니다. 그런 다음이 행렬의 행 단위 최소값을 찾아야하지만 먼저 대각선에서 0을 제외해야합니다. 저는 게으르므로 최소값이 다른 곳에 있는지 확인하기 위해 inf
을 대각선으로 넣었습니다. 결국 우리는 최소한의 거리를 합산해야합니다.
+0
@SrishtiM 재미 있지만, 불행히도 나는 그 주제에 관해서 아무것도 모른다. 그래서 나는 당신을 도울 수 없다. :) –
관련 문제
- 1. 거리를 변환하고 계산하는 데 도움이 필요합니다.
- 2. 근처의 위치를 찾는 데 도움이 필요합니다.
- 3. 평균을 찾는 데 도움이 필요합니다
- 4. 부화기 라이브러리를 찾는 데 도움이
- 5. 요소를 찾는 데 도움이 필요합니다
- 6. Matlab 행렬 최소 행을 찾는 방법
- 7. 점 사이의 최소 거리를 찾는 가장 빠른 방법
- 8. 거리를 계산하는 Matlab
- 9. 루프에서 거리를 계산하는 MATLAB
- 10. 크래시 로그 - 크래시를 찾는 데 도움이 필요합니다.
- 11. HTML 변수의 이름을 찾는 데 도움이 필요합니다
- 12. Drupal - 초보자 - 내용을 찾는 데 도움이 필요합니다.
- 13. 좋은 코드 저장소를 찾는 데 도움이 필요합니다
- 14. 팩토링 코드의 버그를 찾는 데 도움이 필요합니다.
- 15. 간단한 PHP에서 오류를 찾는 데 도움이 필요합니다
- 16. MonoDevelop 2.4 : dll 찾는 데 도움이
- 17. 끈적한 바닥 글을 찾는 데 도움이 필요합니다
- 18. WAVE 파일의 코딩을 찾는 데 도움이 필요합니다.
- 19. 좋은 디자인과 스키마를 찾는 데 도움이 필요합니다.
- 20. 함수 이름을 찾는 데 도움이 필요합니다.
- 21. GridView에서 요소를 찾는 데 도움이 필요합니다. Android
- 22. preg_match_all 패턴을 찾는 데 도움이 필요합니다.
- 23. mysql 쿼리 구문을 찾는 데 도움이 필요하십니까?
- 24. 핀 할당을 찾는 데 도움이 필요합니다
- 25. powershell 스크립트에서 오류를 찾는 데 도움이 필요합니다.
- 26. Regex가 모든 인스턴스를 찾는 데 도움이 ...
- 27. 배치 파일을 찾는 데 도움이 필요합니다
- 28. 코딩 오류를 찾는 데 도움이 필요합니다
- 29. PHP 구조 솔루션을 찾는 데 도움이 필요합니다
- 30. 쌍방향 유클리드 거리를 찾는 빠른 알고리즘
충분한 메모리와 필요한 도구 상자가 있으면 ['pdist'] (http://www.mathworks.com/help/stats/pdist.html)를보십시오. –
필자가 링크 된 문서를 보면,'pdist'의 결과는'[N, N-1]'크기의 행렬이 될 것입니다 : 모든 다른 점에 대한 각 점의 거리. 각 행에 대해이 행렬의 최소값을 간단히 찾아야합니다. 다시 말해서, min (pdist (Z, 'euclidean'), [], 2)'은 각 점에 대한 가장 가까운 이웃 거리 여야하며,'sum() '을 사용하면 필요한 것을 얻을 수 있습니다. 물론 이것을 적절한 구현으로 점검해야하지만 매우 간단해야합니다. –
내 의견의 마지막 부분을 놓쳤으므로 벡터입니다. 합계를 계산하려면 sum()을 사용해야합니다 ..... –