首页 > 解决方案 > 使用 networkx 更新图的边属性

问题描述

我有以下带有边缘属性的图表:

import networkx as nx
import random
G=nx.DiGraph()
G.add_edge('x','a', dependency=0.4)
G.add_edge('x','b', dependency=0.6)
G.add_edge('a','c', dependency=1)
G.add_edge('b','c', dependency=0.3)
G.add_edge('b','d', dependency=0.7)
G.add_edge('d','e', dependency=1)
G.add_edge('c','y', dependency=1)
G.add_edge('e','y', dependency=1)

设置好图的结构后,我将对三个不同的边属性进行采样,并将它们与随机数相乘,如下所示:

for i in range(3):
    sampled_edge = random.sample(G.edges, 1)
    print(sampled_edge)
    sampled_edge_with_random_number = G.edges[sampled_edge[0]]['dependency'] * random.uniform(0,1)
    print(sampled_edge_with_random_number)

现在我想用新的采样图属性更新初始图属性,所以它看起来像这样。该算法应该在结构中寻找相同的边缘属性并更新依赖值:

for i in G.edges:
    if i == sampled_edge:
        i['dependency'] = sampled_edge_with_random_number

有人可以帮我弄这个吗?

标签: pythongraphnetworkx

解决方案


您可以访问属性来更新和更改它

>>> G=nx.DiGraph()
>>> G.add_edge('x','a', dependency=0.4)
>>> G['x']['a']
{'dependency': 0.4}
>>> G['x']['a']['dependency'] = 10
>>> G['x']['a']
{'dependency': 10}

另一种方法是nx.set_edge_attributes

>>> sampled_edge = ('x', 'a')
>>> new_val = 42
>>> nx.set_edge_attributes(G, {sampled_edge:{'dependency':new_val}})
>>> G['x']['a']['dependency']
42

('x','a')你在哪里sampled_edge


推荐阅读