过滤图表工具中的子图

时间:2016-05-05 23:04:33

标签: python graph-tool

这是一个关于图形工具的一个荒谬的基本问题,如果要弄清楚如何使用文档解决这个问题应该是微不足道的,但我在圈子里旋转。我并不怀疑这些文档是否全面,但它肯定不会让这很容易。

目标:给定图G,根据G的顶点列表提取诱导子图。

我知道我应该以{{1​​}}某种方式做到这一点。我明白了。我也明白我需要为此创建一个顶点GraphView。但究竟应该创造什么呢?

这里的文档非常缺乏。例如,page on PropertyMaps表示每个PropertyMap可以是某种类型,但我还没弄清楚这意味着什么。这些类型代表什么?我什么时候想要使用另一种类型?鉴于PropertyMap对图表工具的有效使用显然有多重要,我对文档的不清楚感到有些困惑。

对于这个问题,我感到模糊,我需要使用布尔类型,因为我想在子图中将我想要的顶点设置为" true"虽然我不希望子图中的顶点变为" false。"但这是否意味着我创建的PropertyMaps需要与原始图G中的节点数具有相同的长度?或者我可以只提供一个节点列表,并以某种方式让它被理解为那些是唯一被设置为True的节点?

1 个答案:

答案 0 :(得分:5)

你是对的。您必须使用GraphView。在下面的示例中,从具有5个顶点的完整图形创建具有顶点0,1,3的诱导子图

from graph_tool import GraphView, generation

g = generation.complete_graph(5)

# select some vertices
vfilt = g.new_vertex_property('bool');
vfilt[0] = True
vfilt[1] = True
vfilt[3] = True

sub = GraphView(g, vfilt)

print [(g.vertex_index[e.source()], g.vertex_index[e.target()])
           for e in sub.edges()]

输出

[(0, 1), (0, 3), (1, 3)]