18

Python 用の NetworkX グラフ ライブラリを使用しています。プログラムのある時点で、nodeID を一連の数字に「統合」したいと考えています。これが私の素朴なアプローチです:

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]ましたが、それは禁止されています。

ありがとう!

4

2 に答える 2

11

これは機能しますか?

http://networkx.github.io/documentation/latest/reference/generated/networkx.relabel.convert_node_labels_to_integers.html

import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_nodes_from('spam')
print G.nodes()

戻り値:

['a', 1, 's', 'm', 'p']

今:

start = 1
G = nx.convert_node_labels_to_integers(G,first_label=start)
print G.nodes()

戻り値:

[1, 2, 3, 4, 5]
于 2011-03-16T01:12:14.270 に答える
10

あなたの関心がまだ関連している場合networkx.relabel_nodes()は、マッピング辞書を取るものがあります。

于 2015-01-27T23:44:28.707 に答える