首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从群落共生矩阵到每个节点的群落指数

从群落共生矩阵到每个节点的群落指数
EN

Stack Overflow用户
提问于 2014-07-25 13:15:47
回答 1查看 59关注 0票数 0

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

我想用n条目在列表中转换该矩阵,其中对于每个i-th条目,我可以关联一个整数,该整数表示i-th节点所属的单独集群。

例如,在python中,我的矩阵如下(在本例中,节点0和1属于社区A,而节点2和3属于社区B)

代码语言:javascript
复制
matrix([[ 0.,  1.,  0.,  0.],
    [ 1.,  0.,  0.,  0.],
    [ 0.,  0.,  0.,  1.],
    [ 0.,  0.,  1.,  0.]])

这意味着节点0属于同一个社区(节点从0到n-1),如何从该矩阵中提取出如下列表:

代码语言:javascript
复制
[A,A,B,B]

列表的第一个元素代表节点所属的社区的索引?(我使用A和B只是为了更清楚,但这些指数实际上是整数)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-25 13:30:36

假设这种关系是http://en.wikipedia.org/wiki/Symmetric_relation (X_{ij} = X_{ji})和http://en.wikipedia.org/wiki/Transitive_relation (X_{ij} = 1, X_{jk}= = 1 -> X_{ik} = 1),您可以将矩阵看作一个图G=(V,E),其中每个索引i=1,...,n都是一个节点,(i,j)E中是当且仅当X_{ij} = 1

因此,您的“社区”实际上是图中的连通组件。

使用任何图发现/遍历算法(如BFSDFS ),使用以下高级伪代码查找连接组件相当容易:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24956639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档