Python中igraph大组件中节点的身份

4 投票
2 回答
2146 浏览
提问于 2025-04-18 16:08

我正在尝试标记一个网络中哪些节点属于巨型组件,哪些不属于。我并不是想简单地获取这个巨型组件。到目前为止,我有以下代码:

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

这个方法运行得很慢。我怀疑可以通过直接操作 G.components() 这个结构来加快速度。有没有什么好的建议?

2 个回答

1

看起来答案是:

vc = G.components() ##Get VertexClustering object
array(vc.membership)==argmax(vc.sizes) ##argmax(vc.sizes) may always return 0; not sure.
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]

撰写回答