2012-02-27 13 views
8

W multigrafie każde wywołanie * add_edge (a, b, weight = 1) * doda nową krawędź między węzłami a i b. Czy podczas budowania wykresu możliwe jest zmodyfikowanie tego ciężaru po ponownym znalezieniu i. Teraz sprawdzam, czy (a, b) lub (b, a) są połączone, a następnie muszę usunąć na krawędzi, a dodać nowy. Wydaje mi się, że powinienem po prostu móc zaktualizować wagę.Zmiana atrybutów krawędzi w wielokropku networkx

Uwaga: zrobić trzeba multigraphs bo używać różnych typów krawędzi między węzłami (zróżnicowanych użyciu kluczową)

Odpowiedz

13

Dokumentacja Multigraph.add_edge wskazuje, że należy użyć key argumentu jednoznacznie zidentyfikować krawędzie w multigraf. Oto przykład:

>>> 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})] 

Teraz, aby zaktualizować krawędź wprowadzonego przez xyz, po prostu przekazać ten parametr ponownie:

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

Aby przeczytać poprzednią wartość, można użyć get_edge_data takiego:

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

Dzięki! jak mogę pobrać krawędzie odpowiadające kluczowi? znać poprzednią wartość _weight_ na przykład. Czy muszę najpierw przejrzeć wszystkie krawędzie, aby najpierw sprawdzić klucz? – Vladtn

+1

@Vladtn zaktualizowano odpowiedź, aby dodać, jak to zrobić – jterrace

+1

To znacznie upraszcza mój kod ... – Vladtn

Powiązane problemy