簡體   English   中英

networkx圖中不存在的邊列表?

[英]List of edges that don't exist in a networkx graph?

我有一個networkx圖。 使用G.edges()我可以得到所有邊的列表。 但有沒有辦法獲得所有其他不存在的邊的列表? 所以,如果有3個節點:a,b,c,我們假設a和b只是連接,那么我想獲得一個不存在的邊列表,所以像這樣: (a,c), (c,b) 有一種簡單的pythonic方法嗎?

networkx 1.9中實際上有一個名為non_edges的新功能,僅用於此目的:

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是一個生成器。 在處理大型圖形時,使用生成器非常有用。

請注意, Ezekiel Kruglick顯示了一種更好的方法 ,現在networkx具有non_edges (以及non-neighbors )函數。


您可以使用itertools.combinations迭代所有可能的邊緣,並使用G.has_edge檢查它是否不是G中的邊緣:

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)

產量

[('A', 'C')]

@ unutbu的答案可能是最有效的方式。 您還可以生成補圖並發出邊緣。

In [1]: import networkx as nx                                                           

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

In [3]: print(nx.complement(G).edges()) 
[('A', 'C')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM