is_isomorphic#

is_isomorphic(G1, G2, node_match=None, edge_match=None)[源代码]#

如果图g1和g2同构,则返回true,否则返回false。

参数
G1, G2: graphs

两个图形G1和G2必须是同一类型。

node_match可调用

在同构测试期间,如果G1中的节点N1和G2中的节点N1应被视为相等,则返回True的函数。如果未指定NODE_MATCH,则不考虑节点属性。

函数的调用方式如下

节点匹配(g1.nodes [n1] ,G2节点 [n2] )

也就是说,函数将接收n1和n2的节点属性字典作为输入。

edge_match可调用

在同构测试期间,如果G1中的节点对(U1,v1)和G2中的(U2,v2)的边属性字典应被视为相等,则返回True的函数。如果未指定EDGE_MATCH,则不考虑边属性。

函数的调用方式如下

边沿匹配(G1) [u1] [v1] ,G2 [u2] [v2] )

也就是说,函数将接收正在考虑的边的边属性字典。

笔记

使用vf2算法 [1].

工具书类

1

L.P.Cordella,P.Foggia,C.Sansone,M.Vento,“一种用于匹配大图的改进算法”,第三届IAPR-TC15研讨会,关于模式识别中的基于图的表示,Cuen,第149-159页,2001。Https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.101.5342

实例

>>> import networkx.algorithms.isomorphism as iso

对于有向图g1和g2,使用“weight”边缘属性(默认值:1)

>>> G1 = nx.DiGraph()
>>> G2 = nx.DiGraph()
>>> nx.add_path(G1, [1, 2, 3, 4], weight=1)
>>> nx.add_path(G2, [10, 20, 30, 40], weight=2)
>>> em = iso.numerical_edge_match("weight", 1)
>>> nx.is_isomorphic(G1, G2)  # no weights considered
True
>>> nx.is_isomorphic(G1, G2, edge_match=em)  # match weights
False

对于多图表g1和g2,使用“fill”节点属性(默认:“”)

>>> G1 = nx.MultiDiGraph()
>>> G2 = nx.MultiDiGraph()
>>> G1.add_nodes_from([1, 2, 3], fill="red")
>>> G2.add_nodes_from([10, 20, 30, 40], fill="red")
>>> nx.add_path(G1, [1, 2, 3, 4], weight=3, linewidth=2.5)
>>> nx.add_path(G2, [10, 20, 30, 40], weight=3)
>>> nm = iso.categorical_node_match("fill", "red")
>>> nx.is_isomorphic(G1, G2, node_match=nm)
True

对于多图表g1和g2,使用“weight”边缘属性(默认值:7)

>>> G1.add_edge(1, 2, weight=7)
1
>>> G2.add_edge(10, 20)
1
>>> em = iso.numerical_multiedge_match("weight", 7, rtol=1e-6)
>>> nx.is_isomorphic(G1, G2, edge_match=em)
True

对于多图表g1和g2,使用默认值为7和2.5的“权重”和“线宽”边缘属性。还使用默认值为“red”的“fill”节点属性。

>>> em = iso.numerical_multiedge_match(["weight", "linewidth"], [7, 2.5])
>>> nm = iso.categorical_node_match("fill", "red")
>>> nx.is_isomorphic(G1, G2, edge_match=em, node_match=nm)
True