如何通过指定规则改变边缘的权重?

Posted

技术标签:

【中文标题】如何通过指定规则改变边缘的权重?【英文标题】:How to change edges' weight by designated rule? 【发布时间】:2011-04-27 07:02:24 【问题描述】:

我有一个加权图:

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

【讨论】:

以上是关于如何通过指定规则改变边缘的权重?的主要内容,如果未能解决你的问题,请参考以下文章

solr入门之权重排序方法初探之使用edismax改变权重

Keras如何改变加载模型的可训练层

如何更改节点大小和边缘权重 NetworkX?

加权边缘如何影响networkx中的PageRank?

添加边缘权重以在 networkx 中绘制输出

通过从每个顶点中选取最小边缘的MST算法?