在图形工具中过滤子图

Filtering a subgraph in graph-tool

这是一个关于图形工具的荒谬基本问题,使用文档弄清楚如何解决这个问题应该是微不足道的,但我在兜圈子。我不怀疑文档的全面性,但肯定不会让这一切变得简单。

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

我知道我应该以某种方式用 GraphView 来做这件事。我明白了。我也明白我需要为此制作一个顶点 PropertyMap。但我到底应该创造什么?

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

对于这个问题,我隐约觉得需要使用布尔类型,因为可能我想把子图中我想要的顶点设置为"true",而我不想要的顶点在 "false." 的子图中但这是否意味着我创建的 PropertyMap 需要与原始图 G 中的节点数具有相同的长度?或者我可以只提供一个节点列表,并以某种方式让人们理解这些是唯一要设置为 True 的节点吗?

你是对的。你必须使用 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)]