我正在使用:
循环遍历图表的边缘 for es in graph.es:
....
# v = []
# v = es.vertices()?
...
我可以使用什么方法来获取每条边的源顶点和目标顶点?
答案 0 :(得分:12)
这些是igraph的基本功能,彻底描述了here。
如果您迭代<EdgeSeq>
对象(graph.es
),则会遍历所有<Edge>
个对象(此处为edge
)。 <Edge>
具有属性source
和target
。这些是顶点id,只是整数。您可以通过<Vertex>
获取相应的graph.vs[]
对象:
for edge in graph.es:
source_vertex_id = edge.source
target_vertex_id = edge.target
source_vertex = graph.vs[source_vertex_id]
target_vertex = graph.vs[target_vertex_id]
# using get_eid() you can do the opposite:
same_edge_id = graph.get_eid(source_vertex_id, target_vertex_id)
same_edge = graph.es[same_edge_id]
# by .index you get the id from the Vertex or Edge object:
source_vertex.index == source_vertex_id
# True
edge.index == same_edge_id
# True
请注意您是否有定向图,否则源和目标只是两个等效的端点。使用有向图时,您可以将error = False
与get_eid()
一起使用,然后返回-1
,以防顶点之间的给定方向没有边缘。
答案 1 :(得分:0)
这是使用 R 中的内置函数get.data.frame()
从igraph对象获取边信息的一种简单方法(我没有注意到问题是询问python,对不起):
edges_data_frame <- get.data.frame(your_igraph, what = "edges")
edges_data_frame
的前两列将是“from”和“to”。如果存在,则以下列将是边的其他属性。