2010-10-19 42 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})]