微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将一个图中的边权重添加到 NetworkX 中另一张图中的匹配边? 结果完整代码:注意:

如何解决如何将一个图中的边权重添加到 NetworkX 中另一张图中的匹配边? 结果完整代码:注意:

我在 networkx 中有两个不同的图,一个图包含所有边。另一个图是总边的子集。我如何从边图中的总集合中获取权重并将它们添加到新图中的匹配边?

#total edge collection
G.edges(data = True)

OutEdgeDataView([(1,2,{'weight': 10}),(2,3,{'weight': 0}),5,6,1,(3,4,7,8,(4,(5,(6,(7,(8,{'weight': 0})])
T = nx.Graph()
T.add_edges_from([(1,2),3),5),6),8),4),7)])
T.edges(data = True)

EdgeDataView([(1,{}),{})])

我希望 T EdgeDataView 看起来像

EdgeDataView([(1,{'weight':10}),{'weight': 0})])

任何想法将不胜感激,

解决方法

您可以试试networkx Graph.edge_subgraph function

以您为例。
首先创建图表:

G = nx.DiGraph()
G.add_edges_from([(1,2,{'weight': 10}),(2,3,{'weight': 0}),5,6,1,(3,4,7,8,(4,(5,(6,(7,(8,{'weight': 0})])

接下来,选择您假装添加到新图中的节点:

edge_set = [(1,2),3),5),6),8),4),7)]

然后,从一个图中提取边到另一个:

Di_T = G.edge_subgraph(edge_set)

请注意,由于 G 是定向的,T 也将被定向,因此:

T = Di_T.to_undirected()    # see NOTE in the end

结果

>>> T.edges(data = True)

EdgeDataView([ (1,{'weight': 0})])

完整代码:

# example graph

G = nx.DiGraph()
G.add_edges_from([(1,{'weight': 0})])


# example edge set

edge_set = [(1,7)]


# solution

T = G.edge_subgraph(edge_set).to_undirected()
T.edges(data = True)

注意:

通常副本由G.edge_subgraph(edge_set) (使用.copy) 为了获得图形的新副本而不是 原始图的参考(见the notes in the Docs)。
但是,.to_undirected 已经制作了图形的深层副本 所以不需要 .copy,检查 G.edge_subgraph.to_undirected 文档了解更多信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。