2010-10-19 19 views
13

ich einen gewichteten Graphen haben:NetworkX (Python): Wie Kanten Gewicht durch die benannten Regel ändern

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

die Knotenliste erhalten:

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

Ich möchte jedes Gewicht Rand ändern, indem diese Regel:

einen Knoten entfernen, wie beispielsweise Knoten 5, klar, Rand (4, 5) und (5, 6) wird gelöscht, und das Gewicht jeder Kante wird mich zu:

{# diese Kanten sind in der Nähe der gelöschte Rand (4, 5) und (5, 6)

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

(6,7): "Gewicht '= 1,1,

#these Kanten sind in der Nähe der Ränder oben erwähnten

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

(7,8):' Gewicht "= 1,2,

#diese Kanten sind in der Nähe der edg es oben erwähnte

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

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

# Dieser Rand ist in der Nähe (1,2)

(0,1): 'Gewicht' = 1,4}

Wie schreibe ich diesen Algorithmus?

PS: path_graph ist nur ein Beispiel. Ich brauche ein Programm für jeden Diagrammtyp. Außerdem muss das Programm iterierbar sein, dh ich kann jedes Mal einen Knoten aus dem Ursprungsdiagramm entfernen.

Grüße

+0

Ich verstehe nicht die Regeln für die Umverteilung des Gewichts – inspectorG4dget

Antwort

24

Sie können das Kantengewicht als G Access [u] [v] [ 'Gewicht'] oder durch in den Kantendaten iteriert. So können Sie z.B.

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