我有一个n x n
矩阵X_{ij}
,如果图表中的节点i-j
和节点i
属于同一个,则j
条目为1群集,否则为0。该矩阵是优化算法的结果,用于在图中查找社区。 p>
我想在列表中使用n
条目转换该矩阵,其中对于每个i
条目,我可以关联一个表示i
- 的单独聚类的整数节点属于。
例如,在python中,我的矩阵如下(在这种情况下,节点0和1属于社区A,而节点2和3属于社区B)
matrix([[ 0., 1., 0., 0.],
[ 1., 0., 0., 0.],
[ 0., 0., 0., 1.],
[ 0., 0., 1., 0.]])
这意味着节点0属于同一个社区(节点从0到n-1) 如何从该矩阵中提取如下列表:
[A,A,B,B]
其中列表的第i个元素表示节点所属社区的索引? (我使用A和B只是为了更清楚,但这些指数实际上是整数)
答案 0 :(得分:1)
假设您的关系为symmetric(X_{ij} = X_{ji}
)和transitive(X_{ij} = 1, X_{jk}= = 1 -> X_{ik} = 1
),您可以将矩阵视为图G=(V,E)
index i=1,...,n
是一个节点,当{且仅(i,j)
时,E
位于X_{ij} = 1
。
所以,你的"社区"实际上是图的连接组件。
使用以下高级伪代码,使用任何图形发现/遍历算法(例如BFS和DFS)查找连接的组件非常容易:
X = V //all nodes initially in X
count = 1
while X is not empty:
choose random x in X
do BFS from x, let the set of discovered nodes be U
for each node u in U:
yield (u,count) //u is in the community labeled as count
count = count + 1
X = X \ U //remove all nodes in U from X