5

这是一个关于图形工具的可笑的基本问题,弄清楚如何使用文档来解决这个问题应该是微不足道的,但我在绕圈子。我不怀疑文档的全面性,但它肯定不会让这变得容易。

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

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

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

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

4

1 回答 1

7

你说的对。你必须使用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)]
于 2016-05-05T23:58:30.373 回答