从社区共现矩阵到每个节点的社区索引

时间:2014-07-25 13:15:47

标签: python algorithm graph cluster-analysis

我有一个n x n矩阵X_{ij},如果图表中的节点i-j和节点i属于同一个,则j条目为1群集,否则为0。该矩阵是优化算法的结果,用于在图中查找社区。

我想在列表中使用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只是为了更清楚,但这些指数实际上是整数)

1 个答案:

答案 0 :(得分:1)

假设您的关系为symmetricX_{ij} = X_{ji})和transitiveX_{ij} = 1, X_{jk}= = 1 -> X_{ik} = 1),您可以将矩阵视为图G=(V,E) index i=1,...,n是一个节点,当{且仅(i,j)时,E位于X_{ij} = 1

所以,你的"社区"实际上是图的连接组件
使用以下高级伪代码,使用任何图形发现/遍历算法(例如BFSDFS)查找连接的组件非常容易:

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