2010-10-19 10 views
13

Ho un grafo pesato:NetworkX (Python): come cambiare il peso bordi dalla regola designato

F=nx.path_graph(10) 
G=nx.Graph() 
for (u, v) in F.edges(): 
    G.add_edge(u,v,weight=1) 

ottenere la lista nodi:

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)] 

voglio cambiare il peso di ogni spigolo da questa regola:

rimuovere un nodo, come il nodo 5, chiaramente, bordo (4, 5) e (5, 6) sarà eliminare, e il peso di ciascun bordo girerà a:

012.351.641,061 mila

{# questi bordi si trovano nelle vicinanze del bordo cancellato (4, 5) e (5, 6)

(3,4): 'peso' = 1,1,

(6,7): 'peso '= 1,1,

bordi #Queste sono vicine ai bordi sopra menzionati

(2,3):' peso '= 1,2,

(7,8):' peso '= 1,2,

#Questi bordi si trovano nelle vicinanze es suddette

(1,2): 'peso' = 1,3,

(8,9): 'peso' = 1,3,

# questo bordo è nelle vicinanze (1,2)

(0,1): "peso" = 1,4}

Come scrivere questo algoritmo?

PS: path_graph è solo un esempio. Ho bisogno di un programma adatto a qualsiasi tipo di grafico. Inoltre, il programma deve essere iterabile, significa che posso rimuovere un nodo dal grafico di origine ogni volta.

saluti

+0

Non capisco le regole per ridistribuire il peso – inspectorG4dget

risposta

24

È possibile accedere al peso bordo come G [u] [v] [ 'peso'] o mediante iterazione sui dati bordo. Quindi puoi ad es.

In [1]: import networkx as nx 

In [2]: G=nx.DiGraph() 

In [3]: G.add_edge(1,2,weight=10) 

In [4]: G.add_edge(2,3,weight=20) 

In [5]: G[2][3]['weight'] 
Out[5]: 20 

In [6]: G[2][3]['weight']=200 

In [7]: G[2][3]['weight'] 
Out[7]: 200 

In [8]: G.edges(data=True) 
Out[8]: [(1, 2, {'weight': 10}), (2, 3, {'weight': 200})] 

In [9]: for u,v,d in G.edges(data=True): 
    ...:  d['weight']+=7 
    ...:  
    ...:  

In [10]: G.edges(data=True) 
Out[10]: [(1, 2, {'weight': 17}), (2, 3, {'weight': 207})] 
Problemi correlati