2017-08-02 96 views
0

我正在嘗試訪問圖形工具邊緣。例子:假設下面的圖。如何訪問圖形工具邊緣?爲什麼圖形工具邊緣沒有ID?

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

有兩個邊緣從頂點0要頂點4,一個具有長度l和一個與長度2.

我的問題是現在如何選擇特定的邊緣,知道邊緣索引。 不幸的是,圖形工具文檔現在指出:「...邊緣不能直接通過其索引獲得,但是如果給定邊的源頂點和目標頂點已知,則可以使用edge()方法獲得邊... 「

但是,在保存並加載圖形之後,變量v0,v1 ...以及e0,e1 ...不再可用。試圖訪問邊緣在圖中的文檔指出:

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

只是返回邊緣的一個頂點,從0到頂點4.如何訪問另一個?知道邊緣指數是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) 

你還可以用特定的搜索邊緣指數與:

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

非常感謝!但是,不允許邊緣索引訪問邊緣的原因是什麼? (例如g.edge(4)) – JustSomeone

+0

由於邊緣沒有存儲在向量中,因爲所使用的圖形數據結構是一個鄰接表。 –