巨型组件中节点的身份,在igraph中使用Python

时间:2014-08-05 19:52:41

标签: python igraph

我试图标记哪些节点位于网络的巨大组件中,哪些节点不在网络中。我并不想简单地抓住巨大的组件。这就是我到目前为止所做的:

def in_giant(G):
    giant = G.components().giant().vs["name"]
    return map(lambda x: x in giant, G.vs["name"])

这很慢。我怀疑通过直接操作G.components()结构可以做到快速的事情。有什么想法吗?

2 个答案:

答案 0 :(得分:7)

我不确定我是否正确理解了您的问题,但似乎您只需要一个二进制列表(即仅包含TrueFalse的列表),以便项目位于如果相应的顶点位于巨型组件中,则列表中的索引 i 为真。你的解决方案很好,但由于它取决于NumPy,我想我会添加一个不依赖于它的替代方案:

def in_giant(G):
    cl = G.components()
    cl_sizes = cl.sizes()
    giant_component_index = cl_sizes.index(max(cl_sizes))
    return [x == giant_component_index for x in cl.membership]

答案 1 :(得分:1)

看起来答案是:

vc = G.components() ##Get VertexClustering object
array(vc.membership)==argmax(vc.sizes) ##argmax(vc.sizes) may always return 0; not sure.