gpt4 book ai didi

python - 如何在图形工具中比较两个GraphView?

转载 作者:行者123 更新时间:2023-12-01 03:54:47 26 4
gpt4 key购买 nike

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

例如初始图表如下所示:

Initial graph

运行这样的代码后:

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]

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

enter image description here

在相当大的图上运行算法可能会以不同的顺序过滤掉边/顶点,并且可能会导致具有相同的子图但具有不同的过滤器设置。有没有什么好的方法来比较这些 View ? (希望由graph-tool的C++层完成)

最佳答案

如果子图的顶点对齐,则可以使用 similarity()功能。否则,您必须求助于isomorphism() .

关于python - 如何在图形工具中比较两个GraphView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com