在python中设置完整图的边属性

问题描述 投票:0回答:1

我生成具有任意节点的完整图。每条边都有两个属性,其中第二个属性是第一个属性的函数。 (例如,当第一个为 x 时,第二个为 1/x)。 如何将这些属性添加到边缘?

def create_random_topology(size):     
    G = nx.generators.complete_graph(size)
    attfirst={x:random.randint(100,500) for x in G.edges()}
    nx.set_edge_attributes(G,    name="PR", values=attfirst)

    #attsecond= 1/attfirst

我想要这个图表,例如

{(0,1):{PR= 10 , BW=1/10}, (0,2):{PR=5 , BW=1/5}, (1,2):{PR=2 , BW=1/2)}}
由于图形的大小可变,因此我无法访问具有其节点的确切名称的边,例如 (1,2)。

python python-3.x graph networkx jupyter-lab
1个回答
0
投票

你显然可以从

attfirst
制作另一本字典:

nx.set_edge_attributes(G, name='BW', {e: 1/v for e, v in attfirst.items()})

假设该字典不再存在,您可以从

G.edges(data=True)
检索值:

nx.set_edge_attributes(G, name='BW', values={tuple(e): 1/data['PR']
                                             for *e, data in G.edges(data=True)})

边缘数据示例(

size=5
):

G.edges(data=True)

EdgeDataView([(0, 1, {'PR': 295, 'BW': 0.003389830508474576}),
              (0, 2, {'PR': 155, 'BW': 0.0064516129032258064}),
              (0, 3, {'PR': 452, 'BW': 0.0022123893805309734}),
              (0, 4, {'PR': 293, 'BW': 0.0034129692832764505}),
              (1, 2, {'PR': 169, 'BW': 0.005917159763313609}),
              (1, 3, {'PR': 204, 'BW': 0.004901960784313725}),
              (1, 4, {'PR': 487, 'BW': 0.002053388090349076}),
              (2, 3, {'PR': 322, 'BW': 0.003105590062111801}),
              (2, 4, {'PR': 440, 'BW': 0.0022727272727272726}),
              (3, 4, {'PR': 310, 'BW': 0.0032258064516129032})])
© www.soinside.com 2019 - 2024. All rights reserved.