簡體   English   中英

如何將未連接的networkx圖分成多個相互不相交的連接圖?

[英]How to separate an unconnected networkx graph into multiple mutually disjoint graphs that are connected?

我有一個networkx.Graph object 表示一個,其節點代表英語單詞,並且兩個 wnodes 之間的意味着這些節點代表的兩個單詞在它們的同義詞集之間至少有一個共享的認知同義詞(即非空交集)。 我希望這對某人來說是有趣或有用的背景,但我的問題是與圖形、 networkx和 Python 相關的更廣泛適用的問題。

該圖的許多誘導子圖(邊誘導或頂點誘導)都是邊不相交和頂點不相交,我想將這些子圖分成它們自己的networkx.Graph對象,使它們相互連接且相互不相交。 我可能只是在networkx文檔中使用了錯誤的搜索詞,但我沒有看到任何與 "disjoint" 相關的有希望的內容 以下是圖表一小部分的一些示例。

在此處輸入圖像描述

我在 Stack Overflow 上查看了[networkx] disjoint搜索結果,但沒有看到我在尋找什么。 例如, 一個結果談到了當已經有一個邊集從 誘導時獲取誘導子圖 或者另一篇文章談到嘗試繪制兩個不相交的圖形,但這是假設您已經擁有它們。 與我的問題的圖論方面有關,但與networkx方面無關,顯然有諸如洪水填充算法之類的東西可以解決我的問題的一部分

現在,作為一個最小的工作示例,讓我們創建一個小的隨機圖,但要確保它是斷開的。

import networkx as nx

g = nx.fast_gnp_random_graph(10, 0.3)

while nx.is_connected(g):
    g = nx.fast_gnp_random_graph(10, 0.3)

此時,我們有一個圖g 我在想的是像下面這樣的東西,我在其中占據了一個相互不相交的圖表列表。 我不僅需要在遍歷節點時添加更多圖表,還需要在 go 時更新圖表。 我認為誘導圖的聯合可能會起作用,但是nx.disjoint_union_allnx.union要么通過重新標記來強制圖不相交(我不希望這樣),要么期望圖已經不相交。

graphs = []

for node in g.nodes(): # same 'g' we made above
    if graphs:
        pass
    else:
        graphs.append(g.subgraph([i for i in g.neighbors(node)] +\
                                 [node]).copy())

如何將未連接的 networkx 圖分成多個相互不相交的連接圖?

您似乎正在尋找連接的組件。
考慮下圖。

在此處輸入圖像描述

components = [g.subgraph(c).copy() for c in nx.connected_components(g)]
for idx,g in enumerate(components,start=1):
    print(f"Component {idx}: Nodes: {g.nodes()} Edges: {g.edges()}")

Output:

Component 1: Nodes: [0, 1, 2, 5, 6, 7, 8, 9] Edges: [(0, 2), (0, 6), (1, 2), (1, 5), (1, 7), (1, 8), (2, 5), (5, 7), (6, 8), (7, 9), (8, 9)]
Component 2: Nodes: [3, 4] Edges: [(3, 4)]

暫無
暫無

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

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