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

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

使用networkx對邊緣進行約束的圖同構

使用networkx對邊緣進行約束的圖同構

慕碼人2483693 2022-06-07 16:53:57
我想定義我自己的兩個圖的同構。我想檢查兩個圖是否同構,因為每條邊都有一些屬性——基本上是放置每條邊的順序。我想知道是否可以使用以下方法:networkx.is_isomorphic(G1,G2, edge_match=some_callable)以某種方式通過定義函數some_callable()。例如,下圖是同構的,因為您可以重新標記節點以從另一個節點獲取一個。即,重新標記 [2<->3]。但是,下面的圖不是同構的。沒有辦法通過重新標記節點來從另一個獲得一個。
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

干得好。這正是該edge_match選項的用途。我將創建 3 個圖,前兩個是同構的(即使權重有不同的名稱 --- 我已經設置了比較函數來說明這一點)。第三個不是同構的。


import networkx as nx

G1 = nx.Graph()

G1.add_weighted_edges_from([(0,1,0), (0,2,1), (0,3,2)], weight = 'aardvark')

G2 = nx.Graph()

G2.add_weighted_edges_from([(0,1,0), (0,2,2), (0,3,1)], weight = 'baboon')

G3 = nx.Graph()

G3.add_weighted_edges_from([(0,1,0), (0,2,2), (0,3,2)], weight = 'baboon')


def comparison(D1, D2):    

    #for an edge u,v in first graph and x,y in second graph

    #this tests if the attribute 'aardvark' of edge u,v is the 

    #same as the attribute 'baboon' of edge x,y.


    return D1['aardvark'] == D2['baboon']


nx.is_isomorphic(G1, G2, edge_match = comparison)

> True

nx.is_isomorphic(G1, G3, edge_match = comparison)

> False


查看完整回答
反對 回復 2022-06-07
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

此處使用完全相同的圖表專門回答問題中的問題。請注意,我正在使用 networkx.MultiGraph 并在放置這些邊時考慮一些“排序”。


import networkx as nx


G1,G2,G3,G4=nx.MultiGraph(),nx.MultiGraph(),nx.MultiGraph(),nx.MultiGraph()


G1.add_weighted_edges_from([(0, 1, 0), (0, 2, 1), (0, 3, 2)], weight='ordering')

G2.add_weighted_edges_from([(0, 1, 0), (0, 3, 1), (0, 2, 2)], weight='ordering')                                                                            

G3.add_weighted_edges_from([(0, 1, 0), (0, 1, 1), (2, 3, 2)], weight='ordering')

G4.add_weighted_edges_from([(0, 1, 0), (2, 3, 1), (0, 1, 2)], weight='ordering')


def comparison(D1,D2):

    return D1[0]['ordering'] == D2[0]['ordering']


nx.is_isomorphic(G1,G2, edge_match=comparison)                                                                                          

>True


nx.is_isomorphic(G3,G4, edge_match=comparison)                                                                                          

>False


查看完整回答
反對 回復 2022-06-07
  • 2 回答
  • 0 關注
  • 402 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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