我有一个矩阵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
PS要强制无方向性,您只需在for循环主体中添加另一条语句即可:
adjMat(nonzeros(A(ind,2:end)),ind) = 1;
这将确保邻接矩阵是对称的,这是无向图的特征。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句