2010-10-19 8 views
13

У меня есть взвешенный граф:NetworkX (Python): как изменить вес Edges' назначенным правилом

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

ответ

24

Вы можете получить доступ веса края как G [и] [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})] 

 Смежные вопросы

  • Нет связанных вопросов^_^