Python 比较两个边和节点上具有属性的小有向图
我想比较两个较小的有向python igraph图,包括边或节点上的所有属性及其值以及边的方向。pythonigraph包中有这样的函数吗 我看到和相关,但它们似乎不适用于属性,也不适用于边的方向性 例如:Python 比较两个边和节点上具有属性的小有向图,python,compare,diff,igraph,Python,Compare,Diff,Igraph,我想比较两个较小的有向python igraph图,包括边或节点上的所有属性及其值以及边的方向。pythonigraph包中有这样的函数吗 我看到和相关,但它们似乎不适用于属性,也不适用于边的方向性 例如: import igraph as ig G1=ig.Graph(directed=True) G2=ig.Graph(directed=True) G1.add_vertices(2) G2.add_vertices(2) G1.vs[0]['gaga'] = 'gugu' G2.vs[0]
import igraph as ig
G1=ig.Graph(directed=True)
G2=ig.Graph(directed=True)
G1.add_vertices(2)
G2.add_vertices(2)
G1.vs[0]['gaga'] = 'gugu'
G2.vs[0]['gaga'] = 'gogo'
G1.add_edge(0,1)
G2.add_edge(1,0)
print G1.isomorphic_vf2(G2)
>>>True
import igraph as ig
G1=ig.Graph(directed=True)
G2=ig.Graph(directed=True)
G1.add_vertices(2)
G2.add_vertices(2)
G1.vs[0]['gaga'] = 'gugu'
G2.vs[0]['gaga'] = 'gogo'
G1.add_edge(0,1)
G2.add_edge(1,0)
print G1.isomorphic_vf2(G2)
def cmp_nodes(g1, g2, i1, i2):
return g1.vs[i1]['gaga'] == g2.vs[i2]['gaga']
print G1.isomorphic_vf2(G2, node_compat_fn=cmp_nodes)
您可以使用
节点\u compat\u fn
和边\u compat\u fn
参数将自定义比较函数传递给方法同构\u vf2
。从:
node_compat_fn-接收两个图和两个节点索引(一个来自第一个图,一个来自第二个图)的函数,如果两个索引给出的节点兼容(即,它们可以相互匹配),则返回True;否则返回False。这可用于限制基于节点特定标准的同构集,这些标准太复杂,无法用节点颜色向量表示(即color1和color2参数)。“无”表示每个节点都与其他节点兼容
及
edge_compat_fn-接收两个图和两个边索引(一个来自第一个图,一个来自第二个图)的函数,如果两个索引给出的边兼容(即它们可以相互匹配),则返回True,否则返回False。这可用于限制基于边缘特定标准的同构集,这些标准过于复杂,无法用边缘颜色向量表示(即边缘颜色1和边缘颜色2参数)。“无”表示每条边都与其他节点兼容
例如:
import igraph as ig
G1=ig.Graph(directed=True)
G2=ig.Graph(directed=True)
G1.add_vertices(2)
G2.add_vertices(2)
G1.vs[0]['gaga'] = 'gugu'
G2.vs[0]['gaga'] = 'gogo'
G1.add_edge(0,1)
G2.add_edge(1,0)
print G1.isomorphic_vf2(G2)
>>>True
import igraph as ig
G1=ig.Graph(directed=True)
G2=ig.Graph(directed=True)
G1.add_vertices(2)
G2.add_vertices(2)
G1.vs[0]['gaga'] = 'gugu'
G2.vs[0]['gaga'] = 'gogo'
G1.add_edge(0,1)
G2.add_edge(1,0)
print G1.isomorphic_vf2(G2)
def cmp_nodes(g1, g2, i1, i2):
return g1.vs[i1]['gaga'] == g2.vs[i2]['gaga']
print G1.isomorphic_vf2(G2, node_compat_fn=cmp_nodes)
是的,我读过。它说我可以比较每个图的一个节点对和/或边对。事实上,我需要比较两个图的所有节点和所有边。我添加了一个示例,希望能更好地解释它。使用graph1和graph2以及某些顶点对的索引调用比较函数。对于许多不同的顶点对,会多次调用此函数,直到算法完成。它允许您比较节点上的属性。如果需要,您可以为边创建一个类似的函数。好的,这似乎返回了我想要的结果。请您解释一下如何将函数
cmp_节点
作为同构函数vf2
中的参数调用,以及除此之外,如何在没有自身参数的情况下调用该函数?当然可以。使用符号node\u compat\u fn=cmp\u nodes
我们将句柄传递给函数cmp\u nodes
,并将其绑定到参数node\u compat\u fn
。这意味着在isomorphic\u vf2
内部,可以通过写入node\u compat\u fn(g1、g2、v1、v2)
来调用cmp\u节点
函数。由程序员/代码确保正确调用函数。这里有一个最小的例子:这个例子应该是下面的吗<代码>返回g1.vs['gaga'][i1]==g2.vs['gaga'][i2]即在属性名称后加索引,因为它是列表字典。