如何通过指定规则改变边缘的权重? [英] How to change edges' weight by designated rule?

查看:113
本文介绍了如何通过指定规则改变边缘的权重?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个加权图:

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

我想通过此规则更改每个边缘的权重:

I want to change each edge's weight by this rule:

删除一个节点,例如节点5,显然,边缘(4, 5)(5, 6)将被删除,并且每个边缘的权重将变为:

Remove one node, such as node 5, clearly, edge (4, 5), and (5, 6) will be delete, and the weight of each edge will turn to:

{# 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只是一个示例.我需要一个适合任何图形类型的程序.此外,该程序必须是可迭代的,这意味着我每次都可以从原始图中删除一个节点.

path_graph is just an example. I need a program to suit any graph type. Furthermore, the program need to be iterable, it means I can remove one node from the origin graph each time.

推荐答案

您可以将边缘权重作为G [u] [v] ['weight']或通过遍历边缘数据来访问.这样您就可以

You can access the edge weight as G[u][v]['weight'] or by iterating over the edge data. So you can e.g.

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

这篇关于如何通过指定规则改变边缘的权重?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆