2010-10-19 56 views
13

改變邊緣的體重我有一個加權圖:NetworkX(蟒蛇):如何通過指定規則

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

得到節點列表:

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

我想通過改變每個邊緣的重量這條規則:

清除一個節點,比如節點5,顯然邊緣(4,5)和(5,6)將被刪除,每條邊的權重將變爲:

{#這些邊緣附近的邊緣刪除(4,5)和(5,6)

(3,4): '重量'= 1.1,

(6,7):「重量'= 1.1,

#these邊緣附近的邊緣上面提到

(2,3):' 重量 '= 1.2,

(7,8):' 重量「= 1.2,

#這些邊緣在edg附近上面提到的ES

(1,2): '重量'= 1.3,

(8,9): '重量'= 1.3,

#該邊緣附近是(1,2)

(0,1):'weight'= 1.4}

如何寫這個算法?

PS:path_graph只是一個例子。我需要一個適合任何圖形類型的程序。此外,該程序需要可迭代,這意味着我可以每次從原始圖中刪除一個節點。

問候

+0

我不明白重新分配重量的規則 – inspectorG4dget 2010-10-19 04:40:09

回答

24

可以訪問邊緣權重爲G [U] [V] [ '重量']或通過遍歷所述邊緣數據。所以你可以

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