2016-08-16 5 views
1

난 다음 가지고 D는 N1의 엑스 D1 행렬유클리드 거리 계산을 위해 행렬 더하기 및 곱셈을 조작하는 방법은 무엇입니까?

A = [1 2 3; 4 5 6; 7 8 9]; 
B = [10 11 12; 13 14 15]; 

[N1, D1] = size(A); 
[N2, D2] = size(B); 

A_sq = sum(A.^2, 2); 
B_sq = sum(B.^2, 2)'; 
D = A_sq(:,ones(1,N2)) + B_sq(ones(1,N1),:) - 2.*(A*B'); 

.

나는 하나의 단계 D에 대한 표현을 쓰고 싶은, 즉,이 같은 (이 그림의 목적이지만, 위의 코드와 같은 유클리드 거리 계산한다) :

D = sum(A - B).^2; 

I을 어떤 조언을 주셔서 감사합니다.

+3

이 코드는 다소 어렵습니다. 유클리드 거리를 계산하려고합니까? –

+0

데이터 포인트와 중심 사이의 거리를 계산하기 위해 k-means 클러스터링을 사용합니다. A는 B보다 많은 행을 갖지만 둘 다 같은 차원을가집니다. –

+0

A에서 각 벡터와 B에서 각 벡터 사이의 거리가 너무 멀습니까? –

답변

0

당신은 통계 도구 상자를 가지고 있다면 그냥하지 pdist2, 사용할 수 있습니다

D = pdist2(A,B).^2 

아니면 bsxfunpermute 사용하여 수동으로 작업을 수행 할 수 있습니다 귀하의 예를 들어

D = permute((sum(bsxfun(@minus, A, permute(B, [3 2 1])).^2,2)), [1 3 2]); 

행렬을
A = [1 2 3; 4 5 6; 7 8 9]; 
B = [10 11 12; 13 14 15]; 

상기 g ives

D = 
    243 432 
    108 243 
    27 108