繁体   English   中英

Networkx多重图不从另一个图添加边

[英]Networkx multigraph not adding edges from another graph

我正在尝试采用无向图并将其转换为 networkx 中的多重图。 Networkx 提供了多种方法来做到这一点,但它们似乎都失败了。

import networkx as nx

p = nx.complete_graph(3)
#p is the graph we'd like to convert into a multigraph

pMuti = nx.MultiGraph(incoming_graph_data=p)
print(nx.is_multigraphical(pMuti))
#output is false

pMuti = nx.MultiGraph()
for u,v in p.edges:
    pMulti.add_edge(u,v)
print(nx.is_multigraphical(pMuti))
#output is false

pMuti = nx.MultiGraph()
pMuti.add_edges_from(p.edges)
print(nx.is_multigraphical(pMuti))
#output is false

Welp让我知道我做错了什么,在此先感谢。
==更新==
p中的边数据为([(0, 1), (0, 2), (1, 2)])
通过 networkx 的 setedge 属性函数将边数据添加到 p 中的所有边时:

attrs = {(u,v):{"randomKey":"val"} for (u,v) in p.edges}
nx.set_edge_attributes(p, attr)
pMuti = nx.MultiGraph(incoming_graph_data=p)
print(nx.is_multigraphical(pMuti))
#output is false

即使在这里使用 Networkx 自己的 multigraph 参考,我们仍然在 is multigraph 测试中得到错误(特别是使用示例、节点和边缘部分的片段)。

G = nx.MultiGraph()
H = nx.path_graph(10)
keys = G.add_edges_from(H.edges)
print(nx.is_multigraphical(G))
#output is false

但是,如果我明确添加边缘

q = nx.MultiGraph()
keys = q.add_edges_from([(1,2,{"attr1":1}), (1,3,{"attr2":2}),(3,2,{"attr3":3})])
#with or without attributes for each edge
print(nx.is_multigraphical(q))
#output is true

不知何故,输出是真的。
再次,提前感谢我知道这是一个很长的帖子。

您的图表一个MultiGraph ,其中包含来自p的数据。 例如,以下返回True

isinstance(pMuti, nx.MultiGraph)

您可以通过调用pMuti.edges来检查pMuti的边缘,它按预期返回:

MultiEdgeView([(0, 1, 0), (0, 2, 0), (1, 2, 0)])

问题是误解了nx.is_multigraphical()的作用。 它测试表示节点度数的整数序列是否具有称为“multigraphiness”的属性,但它不会测试对象以查看它是否是 networkx MultiGraph

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM