Как изменить вес ребер по заданному правилу?
У меня есть взвешенный график:
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)
будут удалены, а вес каждого ребра превратится в:
{# these edges are nearby the deleted edge (4, 5) and (5, 6)
(3,4):'weight'=1.1,
(6,7):'weight'=1.1,
#these edges are nearby the edges above mentioned
(2,3):'weight'=1.2,
(7,8):'weight'=1.2,
#these edges are nearby the edges above mentioned
(1,2):'weight'=1.3,
(8,9):'weight'=1.3,
# this edge is nearby (1,2)
(0,1):'weight'=1.4}
Как написать этот алгоритм?
path_graph
это просто пример. Мне нужна программа для любого графика. Кроме того, программа должна быть повторяемой, это означает, что я могу каждый раз удалять один узел из исходного графа.
Ответы
Ответ 1
Вы можете получить доступ к весу кромки как G [u] [v] ['weight'] или путем итерации по данным края. Таким образом, вы можете, например,
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})]