首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >网络图中不存在的边的列表?

网络图中不存在的边的列表?
EN

Stack Overflow用户
提问于 2014-08-06 11:43:08
回答 3查看 3.6K关注 0票数 6

我有一个networkx图。使用G.edges(),我可以得到所有边的列表。但是有什么方法可以得到所有其他不存在边的列表吗?因此,如果有3个节点: a,b,c,我们假设a和b仅相连,那么我想得到一个不存在的边的列表,如下所示:(a,c), (c,b)。有一种简单的节奏曲方法可以做到吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-06 11:49:46

请注意,Ezekiel Kruglick展示了一种更好的方法可以这样做,现在networkx有一个non_edges(也是non-neighbors)函数。

您可以使用itertools.combinations遍历所有可能的边缘,并使用G.has_edge检查它是否是G中的边缘

代码语言:javascript
运行
复制
import networkx as nx
import itertools as IT
G = nx.MultiGraph()
G.add_edges_from([('A', 'B'), ('B', 'C')])

missing = [pair for pair in IT.combinations(G.nodes(), 2)
           if not G.has_edge(*pair)]
print(missing)

收益率

代码语言:javascript
运行
复制
[('A', 'C')]
票数 5
EN

Stack Overflow用户

发布于 2015-04-25 00:29:32

实际上,networkx1.9中有一个名为边缘的新函数就是为了这个目的:

代码语言:javascript
运行
复制
import networkx as nx
G = nx.MultiGraph()
G.add_edges_from([('A', 'B'), ('B', 'C')])
list(nx.non_edges(G))

Out[3]:
[('A', 'C')]

我在这里将non_edges放入一个list()命令中,以实现输出,因为nx.non_edges是一个生成器。在处理大型图时,有一个生成器可能非常有用。

票数 12
EN

Stack Overflow用户

发布于 2014-08-06 15:14:29

@unutbu的答案可能是最有效的方法。您还可以生成补码图并发出边。

代码语言:javascript
运行
复制
In [1]: import networkx as nx                                                           

In [2]: G = nx.Graph([('A', 'B'), ('B', 'C')])                                          

In [3]: print(nx.complement(G).edges()) 
[('A', 'C')]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25159528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档