我正在使用适用于Python的NetworkX图库。在我的程序中,我希望将我的节点ID“合并”为一系列数字。这是我的天真方法:在NetworkX中移动/重命名节点的最有效方法是什么?
start = 1 # could be anything
for i, n in enumerate(g.nodes()):
if i+start == n:
continue
g.add_node(i+start, attr_dict=g.node[n])
g.add_edges_from([(i+start, v, g[n][v]) for v in g.neighbors(n)])
g.remove_node(n)
有没有一种比所有邻居的详尽副本更快的方法?例如,我试过g[i+start] = g[n]
,但这是被禁止的。
谢谢!
谢谢乔希!该功能完全符合我的要求。但不幸的是,它不在位,所以看[源代码](https://networkx.lanl.gov/trac/browser/networkx/networkx/convert.py)(第214-357行),它仍然是O(V + E)而不是理论上可能的O(V)。不过,它看起来比我的尝试快了25%。 – Juan 2011-03-17 01:03:41
刚才我发现,考虑到在networkx中实现图的方式,O(V)边界将无法实现。必须访问每条边来重新映射nodeID。 – Juan 2011-03-17 01:53:17