Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个边和节点上具有属性的小有向图_Python_Compare_Diff_Igraph - Fatal编程技术网

Python 比较两个边和节点上具有属性的小有向图

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]

我想比较两个较小的有向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]['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]即在属性名称后加索引,因为它是列表字典。