我正在使用適用於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