2016-03-22 4 views
0

Ich muss zählen, wie oft eine gegebene Bedingung (z. B. "ACondition") für jeden Scheitelpunkt in einem Diagramm erfüllt ist. Um dies zu tun, muss ich sicherstellen, dass die Vertex-Eigenschaft auf Null initialisiert wird, was ich explizit tue. Siehe den folgenden Code.Festlegen des Standardeigenschaftswerts in 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 

Gibt es eine Möglichkeit, einen Standardwert eine Eigenschaft an, so dass ich muß nicht explizit festgelegt seinen Anfangswert (das heißt, der zweite Block von Code oben)?

Antwort

1

new_vertex_property akzeptiert einen einzelnen Wert oder eine Sequenz, die verwendet wird, um die Eigenschaft zu initialisieren: g1.new_vertex_property("int32_t", 0)


Ich bin mir nicht sicher, warum Sie sagen, Sie „müssen sicherstellen, dass der Scheitelpunkt Eigenschaft wird initialisiert Null“, denn wenn man keinen Standard bietet, wird es auf jeden Fall auf Null initialisiert werden:

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

wenn die Eigenschaft ein Wahrheitswert ist, sollten Sie bool stattdessen verwenden.

Sie können auch sum und get_array() verwenden, um zufriedene Eigenschaften zu zählen.

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

Vielen Dank für Ihre Antwort. Ich bin neu bei graph_tool und jetzt merke ich, dass ich die Signatur von 'new_vertex_property' übersehen habe ... mein Fehler. – AntA