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 个回答
1
看起来答案是:
vc = G.components() ##Get VertexClustering object
array(vc.membership)==argmax(vc.sizes) ##argmax(vc.sizes) may always return 0; not sure.
7
我不太确定我是否理解你的问题,但看起来你只是需要一个二进制列表(也就是只包含 True
和 False
的列表),这个列表中索引为 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]