나는 행렬 2000x5
, 첫 번째 열에 점 번호, 2-5 열에 4 개의 이웃 (이웃이 없으면 0)이 있습니다. 이것에서 인접 행렬을 만드는 효율적인 방법이 있습니까?
1 129 0 65 0
2 130 0 66 85
3 131 169 67 0
4 132 170 68 87
5 133 0 69 81
6 134 0 70 82
7 135 173 71 83
8 136 174 72 84
9 137 161 73 0
10 138 162 74 93
11 139 163 75 0
12 140 164 76 95
13 141 165 77 89
14 142 166 78 90
15 143 167 79 91
16 144 168 80 92
17 145 0 81 65
18 146 0 82 66
....
다음 스레드를 찾았는데, 하나의 이웃에만 설명되어 있지만 여러 이웃에 대해 사용하는 방법을 모르겠습니다. 인접 행렬에 대한 MATLAB 인접 목록
도움을 주시면 감사하겠습니다.
빠르고 간단한 기술 :
adjMat = zeros(size(A,1));
for ind = 1:size(A,1)
% Flag 1 on each row 'ind' at the indices mentioned in col 2-5
adjMat(ind, nonzeros(A(ind,2:end))) = 1;
end
가장 가까운 이웃 검색을 사용하여 언급 했으므로 인접 목록이 완전히 채워 져야 방향이 지정되지 않은 그래프가 생성 될 수 있습니다. 즉, 1 행에 이웃이 20 개 있으면 20 행에 이웃이 1이있을 가능성이 매우 높습니다. .
그러나 기술적으로 말하면, 이것은 그 자체로 아무것도 가정하지 않고 인접 목록 과 정확히 동일한 인접 행렬을 생성 합니다.
인접 목록의 경우
A = [1 2 3; 2 0 1; 3 1 4; 4 5 3; 5 4 0]
A =
1 2 3
2 0 1
3 1 4
4 5 3
5 4 0
결과는 다음과 같습니다.
adjMat =
0 1 1 0 0
1 0 0 0 0
1 0 0 1 0
0 0 1 0 1
0 0 0 1 0
추신 : 무 방향성 을 강요하려면 for 루프 본문에 다른 문을 추가하면됩니다.
adjMat(nonzeros(A(ind,2:end)),ind) = 1;
이렇게하면 인접 행렬이 대칭이되며, 이는 무 방향 그래프의 특징입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다