白板的微信
干得好。这正是该edge_match选项的用途。我将创建 3 个图,前两个是同构的(即使权重有不同的名称 --- 我已经设置了比较函数来说明这一点)。第三个不是同构的。import networkx as nxG1 = 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)> Truenx.is_isomorphic(G1, G3, edge_match = comparison)> False
aluckdog
此处使用完全相同的图表专门回答问题中的问题。请注意,我正在使用 networkx.MultiGraph 并在放置这些边时考虑一些“排序”。import networkx as nxG1,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) >Truenx.is_isomorphic(G3,G4, edge_match=comparison) >False