【问题标题】:Update edge attributes of a graph with networkx使用 networkx 更新图的边属性
【发布时间】:2020-02-11 10:29:10
【问题描述】:

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

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

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python graph networkx


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答 - 但是有算法方法吗?让代码寻找匹配的边然后更新它?
    • 谢谢 - 这正是我需要的。如果我为我的代码传输它,我会收到以下错误消息:``` TypeError: unhashable type: 'list' ``
    • 更新:我想这与列表和元组之间的差异有关。因为random.sample的输出是"[('x', 'a')]"
    • 我通过实现以下内容解决了错误消息:nx.set_edge_attributes(G, {sampled_edge[0]:{'dependency':new_val}})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多