我所拥有的: gml文件加载节点和边的网络中导入的图形G,。
Problem:如何向选定的边缘E添加新属性。
我想要做的事情:,我想为我的图形的特定边E添加一个新的属性'type‘。注意:这个边E不存在属性'type‘。
我的代码是:
G.edge[id_source][id_target]['type']= value
但是如果我打印G的所有边,现在我就有了n+1边;G的所有旧边,以及一个新的边p= (id_source,id_target,{'type'= value})。此外,旧的边E(我想修改的边)没有新的属性“type”。
所以我的代码添加了一个新的边缘(我不想要)。
--我想更新旧的,添加一个不存在的新属性。
发布于 2014-11-01 15:01:55
您可能有一个networkx MultiGraph,而不是一个图,在这种情况下,边缘的属性设置是一个小技巧。(您可以通过在节点之间加载一个具有多个边的图来获得多个图)。当需要属性G.edge[id_source][id_target]['type']= value
时,您可能会通过分配属性G.edge[id_source][id_target][key]['type']= value
来破坏数据结构。
下面是图和MultiGraphs的不同工作方式的示例。
对于图用例属性,如下所示:
In [1]: import networkx as nx
In [2]: G = nx.Graph()
In [3]: G.add_edge(1,2,color='red')
In [4]: G.edges(data=True)
Out[4]: [(1, 2, {'color': 'red'})]
In [5]: G.add_edge(1,2,color='blue')
In [6]: G.edges(data=True)
Out[6]: [(1, 2, {'color': 'blue'})]
In [7]: G[1][2]
Out[7]: {'color': 'blue'}
In [8]: G[1][2]['color']='green'
In [9]: G.edges(data=True)
Out[9]: [(1, 2, {'color': 'green'})]
对于MultiGraphs,有一个额外的键级别来跟踪平行边,所以它的工作方式有点不同。如果没有显式设置键,MultiGraph.add_edge()将使用内部选择的键(顺序整数)添加一个新的边。
In [1]: import networkx as nx
In [2]: G = nx.MultiGraph()
In [3]: G.add_edge(1,2,color='red')
In [4]: G.edges(data=True)
Out[4]: [(1, 2, {'color': 'red'})]
In [5]: G.add_edge(1,2,color='blue')
In [6]: G.edges(data=True)
Out[6]: [(1, 2, {'color': 'red'}), (1, 2, {'color': 'blue'})]
In [7]: G.edges(data=True,keys=True)
Out[7]: [(1, 2, 0, {'color': 'red'}), (1, 2, 1, {'color': 'blue'})]
In [8]: G.add_edge(1,2,key=0,color='blue')
In [9]: G.edges(data=True,keys=True)
Out[9]: [(1, 2, 0, {'color': 'blue'}), (1, 2, 1, {'color': 'blue'})]
In [10]: G[1][2]
Out[10]: {0: {'color': 'blue'}, 1: {'color': 'blue'}}
In [11]: G[1][2][0]['color']='green'
In [12]: G.edges(data=True,keys=True)
Out[12]: [(1, 2, 0, {'color': 'green'}), (1, 2, 1, {'color': 'blue'})]
发布于 2015-05-08 00:59:00
我不太明白为什么您只想向一个边添加一个属性,相反,您可以向所有边添加一个属性,然后将the wanted value
赋予您特定的边。
Networkx有一个名为set_edge_attributes
的方法,它可以向所有边缘添加一个边缘属性,例如
G = nx.path_graph(3)
bb = nx.edge_betweenness_centrality(G, normalized=False)
nx.set_edge_attributes(G, 'betweenness', bb)
G[1][2]['betweenness']
产出: 2.0
发布于 2019-05-24 10:14:19
下面的答案很有效,请注意,values
和name
的参数在Networkxv1.x(最初编写答案时)和Networkxv2.x之间切换。对于v2.x,代码是:
G = nx.path_graph(3)
bb = nx.edge_betweenness_centrality(G, normalized=False)
nx.set_edge_attributes(G, bb, 'betweenness')
G[1][2]['betweenness']
https://stackoverflow.com/questions/26691442
复制相似问题