2016-03-22 3 views
0

Мне нужно подсчитать, сколько раз заданное условие (например, «ACondition») выполняется для каждой вершины в графе. Для этого мне нужно убедиться, что свойство vertex инициализировано равным нулю, что я делаю явно. См. Код ниже.Установка значения свойства по умолчанию в graph_tool

# Instantiates the graph object and the vertex property. 
import graph_tool.all as gt 
g1 = gt.Graph() 
g1.vp.AProperty = g1.new_vertex_property("int32_t") 

# Sets the vertex property to zero (prior to counting). 
for v1 in g1.vertices(): 
    g1.vp.AProperty[v1] = 0 

# Counts the number of times "ACondition" is satisfied for each vertex. 
for v1 in g1.vertices(): 
    if(ACondition == True): 
     g1.vp.AProperty[v1] += 1 

Есть ли способ задать значение по умолчанию свойства, так что мне не нужно, чтобы установить начальное значение в явном виде (т.е., второй блок кода выше)?

ответ

1

new_vertex_property принимает одно значение или последовательность, которая будет использоваться для инициализации свойства: g1.new_vertex_property("int32_t", 0)


я не уверен, почему вы говорите, что «нужны, чтобы убедиться, что свойство вершины инициализируются ноль», потому что если вы не предоставите по умолчанию, он будет инициализирован к нулю все равно:

>>> g = gt.Graph() 
>>> g.add_vertex(10) 
>>> g.new_vertex_property('int').a 
PropertyArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32) 

Если свойство имеет значение истина, то вы должны использовать bool вместо этого.

Вы также можете использовать sum и get_array(), чтобы рассчитать удовлетворительные свойства.

import graph_tool.all as gt 
g = gt.Graph() 

# Initialize property foo with False value 
g.vp['foo'] = g.new_vertex_property('bool') 

# How many vertices satisfy property foo 
sum(g.vp['foo'].a) 
+0

Благодарим вас за ответ. Я новичок в graph_tool, и теперь понимаю, что я забыл подпись 'new_vertex_property' ... мою ошибку. – AntA