2016-10-20 4 views
2

링크 가장자리의 집합 나는 또한의 날 번호로 표현이 가장자리를 연결하는 모든 링크의 행렬이 주어 인접 행렬을 찾는 방법 예 :내가 예를</p> <pre><code>A = [1;2;3;4]; </code></pre> <p>에 대한 모든 모서리의 벡터가 MATLAB

B = [1 3;3 1;1 2;1 2;2 3;4 3]; 

이 데이터로 인접성 매트릭스를 구성하고 싶습니다. 행렬은 링크에서 모서리의 순서를 고려하지 않아야합니다. 예를 들어 두 번째 링크의 모서리는 1 2이지만 행렬에는 1,2와 2,1의 항목이 있어야합니다. 그래서 그러므로 나는 내가 B의 크기에 대한 루프를 사용하여 다음 B의 각 링크에 대한 egdes을 발견 한 후 1 개의 추가 이외의 다른 방법을 생각할 수 없다이

C = [0 1 1 0;1 0 1 0;1 1 0 1;0 0 1 0]; 

같은 출력을 필요로 i, j에서 사전 초기화 된 4x4 행렬. 여기서 i, j는 링크 에지입니다.

실제 크기가 4보다 큰 많은 크기 때문에 효율적인 방법입니까? 매트릭스를 구성하는 더 좋은 방법을 누군가 도울 수 있습니까?

답변

2

당신은 매트릭스를 구축 할 sparse를 사용하고 선택적으로 full로 변환 할 수 있습니다 A = [1;2;3;4]; B = [1 3;3 1;1 2;1 2;2 3;4 3]를 들어

result = accumarray(B, 1); % accumulate values 
result = result | result.'; % make symmetric with 0/1 values 

, 중 위의

을 제공합니다 동등하게

result = full(sparse(B(:,1), B(:,2), 1)); % accumulate values 
result = result | result.'; % make symmetric with 0/1 values 

, 당신은 accumarray 사용할 수

result = 
    4×4 logical array 
    0 1 1 0 
    1 0 1 0 
    1 1 0 1 
    0 0 1 0 
+0

답변 해 주셔서 감사합니다. 아르 자형. 그러나 나는이 질문에 약간의 변화를 주었다. 링크의 순서와 상관없이 항목이 있어야 매트릭스가 필요합니다. –

+0

당신은 말합니다 _ 행렬은 링크의 모서리 정렬을 고려하지 않아야합니다.하지만 각 모서리에 어떤 순서를 사용해야하는지 어떻게 알 수 있습니까? 순서가 매겨지지 않은 가장자리가 두 번 이상 나타 납니까? 그리고 하나의 사건 만 있다면, 명령은 거꾸로되어야하지 않습니까? 제 말은'B = [1 3; 결과는'C = [0 1 1]'이거나'C = [0 0 1; 1 0 0]'이 될 것인가? –

+0

혼란을 드려 죄송합니다. 주문함으로써 나는 가장자리의 관점에서 링크의 설명을 의미했다. 그래서'B = [1 3; 1 2]'이라면 다른 설명'B = [3 1; 2 1]도'C '를 구성하는 것으로 간주되어야합니다. 따라서이 경우'C = [0 1 1; 1 0 0; 1 0 0]'. 내가 필요한 것은 한 쌍의 모서리가 (i, j)와 (j, i)에 대해 1을 포함해야한다는 것입니다. 희망이 그것을 분명히했다! –

관련 문제