2017-08-02 8 views
0

グラフツールのエッジにアクセスしようとしています。例:次のグラフを仮定します。グラフツールのエッジにアクセスするには?グラフツールのエッジにidsがないのはなぜですか?

from graph_tool.all import * 

g = Graph() 

eprop = g.new_edge_property("int") 
g.edge_properties["distance"] = eprop 

v0 = g.add_vertex() 
v1 = g.add_vertex() 
v2 = g.add_vertex() 
v3 = g.add_vertex() 
v4 = g.add_vertex() 

e0 = g.add_edge(v0, v1) 
g.ep.distance[e0] = 1 
e1 = g.add_edge(v1, v2) 
g.ep.distance[e1] = 1 
e2 = g.add_edge(v2, v3) 
g.ep.distance[e2] = 1 
e3 = g.add_edge(v3, v4) 
g.ep.distance[e3] = 1 
e4 = g.add_edge(v0, v4) 
g.ep.distance[e4] = 1 
e5 = g.add_edge(v0, v4) 
g.ep.distance[e5] = 2 

graph_draw(g, vertex_text=g.vertex_index, vertex_font_size=18, output_size=(200, 200), output="Test.png") 

Image

長の頂点4に頂点0から行く2辺、長さ1と1と1 2.

がありますが私の質問は知って、特定のエッジを選択する方法を、今ありますエッジインデックス。 悲しいことに、グラフツールのドキュメントでは次のように書かれています。 "...エッジは直接インデックスから取得することはできませんが、与えられたエッジのソースとターゲットの頂点がわかっている場合、edge()メソッドで取得できます。 "

グラフを保存して読み込んだ後、変数v0、v1、...とe0、e1、...はもう使用できなくなります。

e = g.edge(0,4) 
print(g.edge_index[e]) 
# > Returns 4 

ただ、他の1にアクセスするためにどのように頂点4に頂点0からエッジのいずれかを返します。ドキュメントは述べているようなグラフ内のエッジにアクセスしようとすると?エッジインデックスを知ることは4と5です。

おかげさまで、よろしくお願いいたします!

+0

「g」はグラフであり、マルチグラフではありません。平行なエッジを持つことができるのはマルチグラフだけです。 – DyZ

+0

私のグラフはマルチグラフです。 https://graph-tool.skewed.de/static/doc/graph_tool.html#graph_tool.Graph これは問題ではありません。問題はエッジにアクセスする方法です! – JustSomeone

答えて

1

あなたは持つノードuとvの間のすべての平行な縁部を得ることができます:あなたが持つすべてのエッジを反復処理することができます

g.edge(u, v, all_edges=True) 

for e in g.edges(): 
    print(e) 

そして、あなたは特定して、エッジを検索することができますindex with:

find_edge(g, g.edge_index, 33) 
+0

ありがとう!エッジインデックスによってエッジにアクセスできない理由は何ですか? (例:g.edge(4)) – JustSomeone

+0

エッジはベクトルに格納されないため、使用されるグラフデータ構造は隣接リストです。 –

関連する問題