使用 python-igraph 从选定的顶点创建子图

subgraph from selected vertices using python-igraph

我正在尝试创建一个修剪后的子图,其中包含来自具有高介数中心性的图的顶点。

这是我的方法:

>>> import igraph as ig
>>> import numpy as np

>>> ig.summary(graph)
IGRAPH DNW- 9358 35488 -- 
+ attr: id (v), label (v), name (v), weight (e)

>>> btwn = graph.betweenness(weights='weight')
>>> ntile = np.percentile(btwn, 95)
>>> pruned_vs = graph.vs.select([v >= ntile for v in btwn])
>>> pruned_graph = graph.subgraph(pruned_vs)

一切正常。但是,生成的子图构造不正确。

>>> ig.summary(pruned_graph)
IGRAPH DNW- 0 0 -- 
+ attr: id (v), label (v), name (v), weight (e)

我尝试更改 subgraphimplementation 属性,但这没有帮助。我错过了什么?

此行不正确:

pruned_vs = graph.vs.select([v >= ntile for v in btwn])

作为参数传递给 select() returns 布尔向量的列表理解,graph.vs.select() 不支持它 - 您需要传递包含索引的向量select 个节点。这可以按如下方式完成:

pruned_vs = graph.vs.select([v for v, b in enumerate(btwn) if b >= ntile])