0

エッジの重みを持つグラフがあります。周りを見回したところ、edge_properties を使用してエッジの重みを表すことができることがわかりました。私はこのようにします:

edge_weight = g.new_edge_property("double")

for i in range(10):
    e = g.add_edge(i, i+1)
    edge_weight[e] = i

ここで、エッジに指定されたエッジの重みを付けて、これからグラフを印刷したいと思います。これを行う方法はありますか?私が思いつくことができる唯一のものはこれです:

edge_weight = g.new_edge_property("double")
edge_str_weight = g.new_edge_property("string")

for i in range(10):
    e = g.add_edge(i, i+1)
    edge_weight[e] = i
    edge_str_weight[e] = str(i)

graph_draw(g, edge_text=edge_str_weight, output="out.png")

動作しますが、かなり冗長です。また、エッジの重みを他の構造などに保存することが提案されている場合は、お気軽にコメントしてください:)

4

2 に答える 2

1

文字列への変換は 内で行われるため、原則として別のプロパティを作成する必要はありませんgraph_draw()。ただし、完全な表現が可能であるため、graph-tool はデフォルトで 16 進浮動小数点表記を使用します。これは、値をファイルに保存するのには理想的ですが、表示するには理想的ではありません。したがって、あなたのアプローチは正しいです。おそらく、以下を使用してより簡潔かつ効率的に行うことができますmap_property_values()

label = g.new_edge_property()
map_property_values(edge_weight, label, lambda w: str(w))

graph_draw(g, edge_text=label, output="out.png"))
于 2015-09-25T06:55:53.483 に答える
1

タイプミスかもしれませんが、への割り当ては、現在作業しているedge_str_weightエッジを参照する必要があります。e

edge_str_weight[e] = str(i)

それ以外では、プロパティ マップを使用することが、一般的にグラフ ツールでの最適なオプションです。なんらかの理由で、プロット目的のためだけに 1 回限りのプロパティ マップを使用する場合は、再度作成する必要があります。

edge_alt_str_weights = g.new_edge_property("string")
for edge in g.edges():
    edge_alt_str_weights[edge] = str(edge_weight[edge])

また、永続的に使用する場合に備えて、保持する予定のプロパティ マップを内部として定義することもできます。

于 2015-09-24T20:43:24.797 に答える