我试图标记哪些节点位于网络的巨大组件中,哪些节点不在网络中。我并不想简单地抓住巨大的组件。这就是我到目前为止所做的:
def in_giant(G):
giant = G.components().giant().vs["name"]
return map(lambda x: x in giant, G.vs["name"])
这很慢。我怀疑通过直接操作G.components()
结构可以做到快速的事情。有什么想法吗?
答案 0 :(得分: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]
答案 1 :(得分:1)
看起来答案是:
vc = G.components() ##Get VertexClustering object
array(vc.membership)==argmax(vc.sizes) ##argmax(vc.sizes) may always return 0; not sure.