質問

GEXF形式のグラフで読み取り、ノードとエッジを追加し、GEXFに書き戻すスクリプトを作成しています。私の問題は、write_gexfが私が読んだエッジにすでに存在していたエッジIDを追加するエッジを与えていることです。

たとえば、グラフを読んだとします G 単一のエッジで。

>>> import networkx as nx
>>> G = nx.read_gexf('first.gexf')
>>> G.edges(data=True)
[(0,1, {'id': '0'})] 

そして、エッジを追加して、GEXFにグラフを書き込みます。

>>> G.add_edge(1,2)
>>> G.edges(data=True)
[('0','1', {'id': '0'}), (1,2, {})]
>>> nx.write_gexf(G,'second.gexf')

「second.gexf」で読んだら、「ID 'equal' 0 'を持つ2つのエッジが得られます。

>>> H = nx.read_gexf('second.gexf')
>>> H.edges(data=True)
[('0','1', {'id': '0'}), ('1','2', {'id': '0'})]

これを避ける方法はありますか?

役に立ちましたか?

解決

NetworkX GEXFライターは、0から始まるエッジID -Integersを生成します - 指定がない場合。 ID(Edge 1,2)なしで2番目のエッジを追加したため、最初のエッジIDと衝突するIDが0のIDが使用されました。

それはバグである可能性があり、確かにあなたのユースケースに問題を引き起こします。回避策の1つは、ノードを追加するときにエッジIDを明示的に設定することです。

In [1]: import networkx as nx

In [2]: G = nx.read_gexf('first.gexf')

In [3]: G.edges(data=True)
Out[3]: [('1', '0', {'id': '0'})]

In [4]: G.add_edge(1,2,id=1)

In [5]: G.edges(data=True)
Out[5]: [('1', '0', {'id': '0'}), (2, 1, {'id': 1})]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top