2012-02-27 22 views
8

マルチマップでは、* add_edge(a、b、weight = 1)*を呼び出すたびにノードbの間に新しいエッジが追加されます。グラフを作成するときに、bが再び見つかると、この重みを変更することは可能ですか?今すぐ(a、b)または(b、a)が接続されているかどうかを調べるために、を削除してエッジを削除し、を追加してを新たに追加します。私は単に体重を更新できるはずです。networkxマルチグラフのエッジ属性の変更

注:私は、ノード間のエッジの異なる種類を使用するので、私はmultigraphsが必要です(キーを使用して区別)

答えて

13

Multigraph.add_edgeドキュメントでは、一意多重グラフのエッジを識別するためにkey引数を使用する必要があることを示しています。ここでは例です:

>>> import networkx as nx 
>>> G = nx.MultiGraph() 
>>> G.add_edge(1, 2, key='xyz', weight=2) 
>>> G.add_edge(1, 2, key='abc', weight=1) 
>>> G.edges(data=True) 
[(1, 2, {'weight': 2}), (1, 2, {'weight': 1})] 

xyzをキーとエッジを更新するために、今、もう一度にそのパラメータを渡す:

>>> G.add_edge(1, 2, key='xyz', weight=7) 
>>> G.edges(data=True) 
[(1, 2, {'weight': 7}), (1, 2, {'weight': 1})] 

は、以前の値を読み取るには、あなたがこのようなget_edge_dataを使用することができます。

>>> G.get_edge_data(1, 2, key='xyz') 
{'weight': 7} 
+0

ありがとうございました!キーに対応するエッジを取得するにはどうすればよいですか?たとえば_weight_の前の値を知ることができます。最初にキーを確認するために、すべてのエッジをループする必要がありますか? – Vladtn

+1

@Vladtnの更新された回答には、それを行う方法が含まれています – jterrace

+1

これは私のコードを大幅に簡略化しています... – Vladtn

関連する問題