我试图创建一个包含来自具有高中介中心性的图形顶点的修剪子图。
这是我的方法:
>>> 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)
我已尝试更改implementation
的{{1}}属性,但这并没有帮助。我错过了什么?
答案 0 :(得分:1)
此行不正确:
pruned_vs = graph.vs.select([v >= ntile for v in btwn])
作为参数传递给select()
的列表理解返回一个布尔向量,graph.vs.select()
不支持 - 您需要传递一个包含要选择的节点索引的向量。这可以按如下方式完成:
pruned_vs = graph.vs.select([v for v, b in enumerate(btwn) if b >= ntile])