2016-05-05 5 views
2

Это смехотворный основной вопрос о графическом инструменте, который должен быть тривиальным, чтобы выяснить, как решить эту проблему, но я вращаюсь по кругу. Я не сомневаюсь, что документация всеобъемлющая, но это, конечно, не делает это легко.Фильтрация подграфа в графическом инструменте

ЦЕЛЬ: Учитывая график G, извлечь индуцированный подграф на основе списка вершин графа G.

Я знаю, что я должен делать это с GraphView каким-то образом. Я понимаю. Я также понимаю, что для этого мне нужно сделать вершину PropertyMap. Но что именно я должен создавать?

Документацию здесь очень не хватает. Например, page on PropertyMaps говорит, что каждый PropertyMap может быть определенного типа, но я не понял, что это значит. Что представляют собой типы? Когда я захочу использовать один тип над другим? Учитывая, насколько важен PropertyMaps для эффективного использования графического инструмента, я немного озадачен тем, насколько неясны документы.

Для этой проблемы я получаю смутное ощущение, что мне нужно использовать логический тип, потому что, может быть, я хочу установить вершин, которые я хочу в подграфе, «true», в то время как вершины, которые я не хочу в подграфе к «ложному». Но означает ли это, что PropertyMap, который я создаю, должен иметь ту же длину, что и число узлов в моем исходном графе G? Или я могу просто предоставить список узлов и каким-то образом понять, что для них единственными являются True?

ответ

3

Вы правы. Вы должны использовать GraphView. В приведенном ниже примере индуцированной подграф с вершинами 0, 1, 3 созданы из полного графа с 5 вершинами

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)] 

 Смежные вопросы

  • Нет связанных вопросов^_^