2013-10-13 2 views
2

이전에 만든 유클리드 거리 매트릭스에서 인접 매트릭스를 만드는 방법을 알고 싶었습니다. 예 :matlab에 주어진 유클리드 거리 매트릭스의 인접 매트릭스

Edm = [0  7.7466 7.7534 0  3.7296 2.8171; 
     7.7466 0  0.0068 7.7466 4.0170 4.9295; 
     7.7534 0.0068 0  7.7534 4.0239 4.9364; 
     0  7.7466 7.7534 0  3.7296 2.8171; 
     3.7296 4.0170 4.0239 3.7296 0  0.9125; 
     2.8171 4.9295 4.9364 2.8171 0.9125 0  ] 

Edm 서로간에 그들의 유클리드 거리에 기초 conectivity 노드 1-6를 나타낸다. 같은 노드로부터의 거리가 0이기 때문에 대각선은 0이어야합니다.

위의 Edm의 2 개의 가장 가까운 이웃 행렬로 adjaceny 행렬을 검색 할 수있는 방법이 있습니까?

+0

노드 6에 대한 특수 사례가 있습니다. 노드 1과 노드 4는 동일한 거리를 가지며 둘 다 두 번째로 가까운 이웃이 될 수 있습니다. 이 사건을 어떻게 처리해야합니까? – bdecaf

답변

0

나는 일에 모센의 답변을 얻을하지 않습니다, 그래서 여기 내 (더 성가신) 제안 :

sz = size(Edm,1); 
n = 2;    % Number of desired smallest distances 
E = Edm + diag(Inf(1,sz)); 
[~, mm] = sort(E); 

mmi = mm(1:n,:)'; % n smallest distances (in your example, n = 2) 

Edm_idx = sparse(mmi(:),repmat(1:sz,1,n),1,sz,sz); 

Adj = full(Edm.*Edm_idx); 

0이다 Edm 비 대각 값이 존재하지 않도록. 이들이 Inf (연결되지 않은 것 같음) 인 경우이를 고려해야합니다.

0

Inf에 대각선을 설정하고 해당 열의 최소 값으로 각 컬럼의 요소를 비교하는 bsxfun를 사용

E = Edm + diag(Inf(1,size(Edm,1))); 
A = bsxfun(@eq, E, min(E)); 
+0

이 기능이 제대로 작동합니까? 테스트 할 때 잘못 나온 것입니다. (대칭 인접 행렬을 얻지 못했습니다) –

+0

@RobertP. 나는 대칭을 얻는다. 'A'와 'A'는 어떤 요소가 다른가요? –

+0

각 열에서 가장 작은 값 (0은 제외)을 찾습니다. 나는'sum (A) = [1 1 1 ..]'이된다. 너는 어떠니? –