python - 使用networkx对边进行约束的图同构

标签 python graph networkx isomorphism

我想定义我自己的两个图的同构。我想检查两个图是否同构,因为每条边都有一些属性——基本上是放置每条边的顺序。我想知道是否可以使用以下方法:

networkx.is_isomorphic(G1,G2, edge_match=some_callable) 

通过某种方式定义函数some_callable()

例如,下面的图是同构的,因为您可以重新标记节点以从另一个节点获取一个节点。

G1 G2

即重新标记[2<->3]。

但是,下面的图不是同构的。

G3 G4

无法通过重新标记节点来从另一个节点获取一个节点。

最佳答案

给你。这正是 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

关于python - 使用networkx对边进行约束的图同构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58096816/

相关文章:

python - 在 flask 中找不到我的模型的路径

algorithm - 图中每个顶点之间的距离

plot - Datadog 是否支持具有 2 个不同比例的 Y 轴的图形?

python - NetworkX 教程给出了值选择的关键错误

python - OS X 上 Matplotlib 图形中的表情符号

python - 如何使用 Corpus.slice 添加带有日期的列

python - 异常值检测 DBSCAN

python - WebDriverException : "Process unexpectedly closed with status 255" - selenium/geckodriver/AWS lambda - Python

python - 将 NumPy 数组列表写入 csv

git - 图表贡献者为空