gpt4 book ai didi

python - 如何向networkx中的边缘添加新属性?

转载 作者:IT老高 更新时间:2023-10-28 21:04:26 25 4
gpt4 key购买 nike

我所拥有的: 在 networkx 中导入的图 G,其节点和边由 gml 文件加载。

问题:如何为选中的边E添加新属性。

我想做什么:我想为我的图表的特定边 E 添加一个新属性“类型”。注意:该边 E 不存在“类型”属性。

我的代码是:

  G.edge[id_source][id_target]['type']= value

但是如果我打印 G 的所有边,现在我有 n+1 个边; G 的所有旧边,以及一条新边 p= (id_source, id_target, {'type'= value})。此外,旧边 E(我要修改的边)没有新属性“type”。

所以我的代码添加了一个新的优势(我不想要)。

我想更新旧的添加一个不存在的新属性。

最佳答案

您可能有一个 networkx MultiGraph 而不是一个图,在这种情况下,边的属性设置有点棘手。 (您可以通过加载节点之间具有多条边的图来获得多重图)。您可能会通过分配属性来破坏数据结构 G.edge[id_source][id_target]['type']= value 当您需要时 G.edge[id_source][id_target][key]['type']= value.

以下是 Graphs 和 MultiGraphs 的不同工作方式示例。

对于 Graph 案例属性的工作方式如下:

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

关于python - 如何向networkx中的边缘添加新属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com