Joh*_*nny 16 python algorithm networkx edge-list
我有一个加权图:
F=nx.path_graph(10)
G=nx.Graph()
for (u, v) in F.edges():
G.add_edge(u,v,weight=1)
Run Code Online (Sandbox Code Playgroud)
获取节点列表:
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
Run Code Online (Sandbox Code Playgroud)
我想通过这条规则改变每条边的重量:
删除一个节点,如节点5,清除,edge(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,
#these边缘位于上述边缘附近
(1,2): '重量'= 1.3,
(8,9): '重量'= 1.3,
#这边是附近的(1,2)
(0,1): '重量'= 1.4}
怎么写这个算法?
PS:path_graph只是一个例子.我需要一个适合任何图表类型的程序.此外,程序需要是可迭代的,这意味着我每次都可以从原始图中删除一个节点.
问候
Ari*_*ric 29
您可以将边权重作为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})]
Run Code Online (Sandbox Code Playgroud)