如何访问graph-tool的边缘?为什么graph-tool的边缘没有id?

3

我正在尝试访问graph-tool中的边缘。例如:假设有以下图形。

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

图片

顶点0到顶点4有两条边,一条长度为1,另一条长度为2。

我的问题是如何选择特定的边,已知边的索引。不幸的是,graph-tool文档现在说明:“……不能直接通过索引获取边,但如果给定边的源和目标顶点,则可以使用edge()方法获取边……”

但是,在保存和加载图形后,变量v0、v1等以及e0、e1等不再可用。尝试按照文档所述访问图中的边:

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

只返回从顶点0到顶点4的一条边。如何访问另一条边?已知该边的索引值为4和5。

提前感谢您的帮助!


你的g是一个图,而不是多重图。只有多重图可以拥有平行边。 - DYZ
我的图是一个多重图 - 是的。 https://graph-tool.skewed.de/static/doc/graph_tool.html#graph_tool.Graph但这不是问题。问题是如何访问边缘! - JustSomeone
1个回答

6
您可以使用以下方法获取节点u和v之间的所有并行边:
g.edge(u, v, all_edges=True)

您可以使用以下方式遍历所有边缘:

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

您可以使用以下代码搜索具有特定索引的边:

find_edge(g, g.edge_index, 33)

非常感谢!但是为什么不允许通过边索引访问边缘呢?(例如g.edge(4)) - JustSomeone
2
因为边缘没有存储在向量中,所使用的图形数据结构是邻接表。 - Tiago Peixoto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接