Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 如何在graph tool中比较两个GraphView?_Python_Graph_Graph Tool - Fatal编程技术网

Python 如何在graph tool中比较两个GraphView?

Python 如何在graph tool中比较两个GraphView?,python,graph,graph-tool,Python,Graph,Graph Tool,我需要处理给定图G的许多子图。为此,使用graph工具似乎是一种很好的方法,它利用了GraphView的功能和边/顶点过滤功能。 为了节省时间,我想缓存有关已处理子图的信息。我认为最快的方法是比较顶点和边过滤器。这样的操作会很快,但是。。。似乎我们可以用不同的过滤器得到相同的子图 例如,初始图形如下所示: 运行此类代码后: vFilter1=g.new_vertex_property("bool", val=True) eFilter1=g.new_edge_property("bool",

我需要处理给定图G的许多子图。为此,使用graph工具似乎是一种很好的方法,它利用了GraphView的功能和边/顶点过滤功能。 为了节省时间,我想缓存有关已处理子图的信息。我认为最快的方法是比较顶点和边过滤器。这样的操作会很快,但是。。。似乎我们可以用不同的过滤器得到相同的子图

例如,初始图形如下所示:

运行此类代码后:

vFilter1=g.new_vertex_property("bool", val=True)
eFilter1=g.new_edge_property("bool", val=True)
vFilter1[g.vertex(3)]=False
eFilter1[g.edge(1, 2)]=False
f1=gt.GraphView(g, efilt=eFilter1, vfilt=vFilter1)
print ("VERTEX filter:", f1.get_vertex_filter()[0].get_array())
print ("EDGE   filter:", f1.get_edge_filter()[0].get_array())
我们将有如下过滤器:

VERTEX filter: [1 1 1 0]
EDGE   filter: [1 0 1 1 1]
经过稍微不同的过滤后:

vFilter2=g.new_vertex_property("bool", val=True)
eFilter2=g.new_edge_property("bool", val=True)
vFilter2[g.vertex(3)]=False
eFilter2[g.edge(1, 2)]=False
eFilter2[g.edge(0, 3)]=False
eFilter2[g.edge(2, 3)]=False
f2=gt.GraphView(g, efilt=eFilter2, vfilt=vFilter2)
print ("VERTEX filter:", f2.get_vertex_filter()[0].get_array())
print ("EDGE   filter:", f2.get_edge_filter()[0].get_array())
过滤器将如下所示:

VERTEX filter: [1 1 1 0]
EDGE   filter: [1 0 0 0 1]
创建的两个子图如下所示:

VERTEX filter: [1 1 1 0]
EDGE   filter: [1 0 0 0 1]

在相当大的图上运行算法可能会以不同的顺序过滤出边/顶点,并且可能会导致具有相同的子图,但具有不同的过滤器设置。
有什么好的方法来比较这些观点吗?(希望用C++工具层)< /P> < P>如果子图的顶点是对齐的,你可以使用函数。否则,你必须求助于。

看来同构()对我来说很有效。不幸的是,对于上述示例中的f1和f2,相似度()给出了相同的结果,即使在第二行中注释掉了“vFilter2[g.vertex(3)]=False”,这给出了两个不同的子图(因此在相似度计算中不考虑没有任何连接的自由顶点)。我不确定同构()的复杂性是什么,但至少现在它对于小型/测试图来说已经足够好了。谢谢