如何比较图形工具中的两个 GraphView?

How to compare two GraphView in graph-tool?

我需要处理给定图 G 的许多子图。为此目的使用图形工具似乎是利用其 GraphViews 功能和 edge/vertex 过滤功能的好方法。 为了节省时间,我想缓存有关已处理子图的信息。我认为最快的方法是比较顶点和边缘过滤器。这样的操作会非常快,但是......看起来我们可以用不同的过滤器得到相同的子图。

例如初始图如下所示:

在运行这样的代码之后:

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]

两个创建的子图如下所示:

运行 算法在相当大的图上可能会以不同的顺序过滤掉 edges/vertices,这可能会导致具有相同的子图但具有不同的过滤器设置。 有什么好的方法可以比较这些观点吗? (希望由图形工具的 C++ 层完成)

如果子图的顶点是对齐的,可以使用similarity() function. Otherwise, you have to resort to isomorphism()