0

グラフの頂点ごとに、特定の条件 (「ACondition」など) が何回満たされるかをカウントする必要があります。そのためには、頂点プロパティを明示的にゼロに初期化する必要があります。以下のコードを参照してください。

# 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

初期値を明示的に設定する必要がないように、プロパティのデフォルト値を指定する方法はありますか (つまり、上記のコードの 2 番目のブロック)。

4

1 に答える 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)
于 2016-03-22T12:01:47.860 に答える