2013-08-30 4 views
-5

나는 3D 공간에서 점들의 벡터를 가지고 있습니다.거리 점 3D

A = rand(80,3) 

점 사이의 모든 거리가 포함 된 벡터가 필요합니다.

D = pdist(A,'euclidean') 벡터를 반환합니다. 1-by-3160 올바른 기능을 사용하고 있는지 알려주시겠습니까? 감사합니다.

+0

당신이 그것을 시도? –

+0

한 가지 방법은 알아낼 수 있습니다. 시도해보십시오. –

+0

네, 맞지만 그것이 정확한지 모르겠습니다 ... – gabboshow

답변

2

통계 도구 상자가없는 경우 올바른 기능을 사용할 수 없습니다. 당신이한다면 - 당신이 사용할 수있는 많은 기능 중 하나입니다. 또한 같은 것을 할 수있다 :이 명시 적으로 두 점 사이의 거리를 계산

sz = size(A); 
A1 = reshape(A, [1 sz]); 
A2 = permute(A1, [2 1 3]); 
D = sqrt(sum(bsxfun(@minus, A1, A2).^2,3)); 

을 (즉, 두 배의 작업을 수행하고, 두 배의 공간을 점거 : 6400 대신 3180의 요소). 그러나 두 점 사이의 거리를 찾는 것이 더 쉽습니다.

그러면이 계산 결과를 pdist에서 얻은 결과와 비교하여 동일 여부를 확신 할 수 있습니다. 주의하십시오 - pdist은 기본적으로 벡터를 반환하므로 문서를보고 해석 방법을 이해해야합니다. 기능 squareform 당신을 도울 수 있습니다

difference = sum(abs(squareform(D)) - pdist(A, 'euclidean')); 

그것은 "올바른 기능"입니다 당신의 정의를 ... 당신이 원하는에 따라 어떤 ...

+0

많이 고마워요! 그게 내가 찾고 있던 대답 이었어! – gabboshow

+0

이것이 귀하가 찾고자하는 답변이라면 "수락"으로 표시하십시오. – Floris