亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

NetworkX 制作邊組合的迭代列表

NetworkX 制作邊組合的迭代列表

手掌心 2022-01-18 21:13:55
我有一個 180x180 的鄰接矩陣,我正在嘗試生成所有合理的組合以使用 NetworkX。我想按順序刪除部分圖形,然后確定對新編輯圖形的全局效率的影響。在此視圖中,一組合理的組合是彼此相鄰的所有節點集,以及從假設它們彼此相鄰到子圖的所有可能的子圖組合。運行所有組合的蠻力方法太慢了,對于任何超過 15 個刪除序列的運行時間約為 21 小時。因此,我們只想通過查看彼此相鄰的組合來解決這個問題?;旧洗a需要執行以下操作:導入包含二進制鄰接矩陣的 csv,其中 1 表示物理連續性(在本例中為大腦)導入networkx圖確定彼此之間的路徑長度最多為 1 的所有組合集....換句話說,如果兩個節點或兩個節點集在任一端的距離大于 1,則它們將被忽略為每個合理的組合生成這些節點集的列表這是基本問題假設大腦某個區域的物理空間包括幾個大致像這樣的區域......假設這些是鑲嵌平面的不規則多邊形1 2 3 4 56 7 8 910 11我們可以把它變成一個鄰接矩陣,其中 1 表示區域共享邊界,0 表示它們在物理上沒有相互接壤+--+---------------------------------+|  | 1  2  3  4  5  6  7  8  9  10 11|+--+---------------------------------+|1 | 0  1  0  0  0  1  0  0  0  0  0 ||2 | 1  0  1  0  0  0  1  1  0  0  0 ||3 | 0  1  0  1  0  0  0  1  1  0  0 ||4 | 0  0  1  0  1  0  0  0  1  0  0 ||5 | 0  0  0  1  0  0  0  0  1  0  0 ||6 | 1  0  0  0  0  0  1  0  0  1  0 ||7 | 0  1  0  0  0  1  0  1  0  1  1 ||8 | 0  1  1  0  0  0  1  0  1  0  1 ||9 | 0  0  1  1  0  0  0  1  0  0  0 ||10| 0  0  0  0  0  1  1  0  0  0  1 ||11| 0  0  0  0  0  0  1  1  0  1  0 |+--+---------------------------------+基本上,鄰接矩陣代表了彼此相鄰的大腦部分......我們想要遍歷并生成這些節點的分組列表,這些節點從單個節點開始,并處理每個可能的節點組合需要注意的是,我們不希望這些組合彼此之間沒有身體接觸......因此,例如,這樣的列表將有 1,2,....11 以及 1+2 和 7+8 等最終我們將有 2+7+8 和 6+7+8+10 因為所有這些節點都接觸每個其他并形成一個連接的組件 1-11 是不允許的,因為它們不共享邊界,4+5+10 也不允許,因為它們不接觸這很重要的原因是我們是腦外科醫生,我們刪除部分圖表是為了謀生......即大腦圖表......但你永遠不會刪除不相鄰的節點......我們正在嘗試使用圖表來定義我們可以在手術中走多遠......所以我們需要使用 python 來生成所有可能的節點刪除組合,這在現實世界中是有意義的......二進制鄰接矩陣代表物理空間中的現實一旦我有一個節點刪除的合理組合列表,我就有了一個采用不同 pandas 數據幀的代碼......將節點和邊歸零,然后創建一個 networkx 圖,我們在其上運行效率指標......我只是需要一種方法來確定所有可能的連續組件集,這樣我們就不會運行解剖學上不合理的組合我想解決這個問題的方法是在networkx中使用某種連續組件功能,但是我無論如何都找不到從圖中導出連接組件的所有可能組合基本上代碼會像這樣boundary=pd.read_csv(adjacency.csv)G=networkx.from_pandas_adjacency(boundary)combo="something to iterate the graph g to create a list of all connected components"請注意,我們使用一個 csv 來確定列表并在不同的 CSV 上使用該列表在此先感謝...這是您正在幫助解決的一個重要問題,它將挽救生命
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

連接組件的正確命名是完整的子圖(不要混淆真正的連接組件)。您的問題被稱為集團問題。networkx有幾種算法可以解決這個問題: networkx cliques


你的問題可以通過這個函數來解決:networkx.algorithms.clique.enumerate_all_cliques


請注意,此函數返回所有可能的團,長度也為 1 和 2(即每個節點和每條邊),因此您應該過濾 1-2 長度的團。例如,對于您的圖表,此函數返回:


list(nx.enumerate_all_cliques(G))


[[0],

 [1],

 [2],

 [3],

 [4],

 [5],

 [6],

 [7],

 [8],

 [9],

 [10],

 [0, 1],

 [0, 5],

 [1, 2],

 [1, 6],

 [1, 7],

 [2, 3],

 [2, 7],

 [2, 8],

 [3, 4],

 [3, 8],

 [4, 8],

 [5, 6],

 [5, 9],

 [6, 7],

 [6, 9],

 [6, 10],

 [7, 8],

 [7, 10],

 [9, 10],

 [1, 2, 7],

 [1, 6, 7],

 [2, 3, 8],

 [2, 7, 8],

 [3, 4, 8],

 [5, 6, 9],

 [6, 7, 10],

 [6, 9, 10]]

但如果我們過濾所有無用的派系,我們將得到:


list(filter(lambda x: len(x) > 2, nx.enumerate_all_cliques(G)))


[[1, 2, 7],

 [1, 6, 7],

 [2, 3, 8],

 [2, 7, 8],

 [3, 4, 8],

 [5, 6, 9],

 [6, 7, 10],

 [6, 9, 10]]


查看完整回答
反對 回復 2022-01-18
  • 1 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號