如何在 python 中使用 igraph 从边缘获取顶点?

How to get the vertices from an edge using igraph in python?

我正在通过图形的边缘循环:

 for es in graph.es:
         .... 
         # v = []
         # v = es.vertices()?
         ...

我可以使用什么方法获取每条边的源顶点和目标顶点?

这些是 igraph 的非常基本的功能,here 进行了详尽的描述。 如果您迭代 <EdgeSeq> 对象 (graph.es),您将遍历所有 <Edge> 对象(此处为 edge)。 <Edge> 具有属性 sourcetarget。这些是顶点 ID,只是整数。可以通过graph.vs[]:

得到对应的<Vertex>对象
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 = Falseget_eid() 一起使用,然后 returns -1 以防顶点之间给定方向上没有边。

这是使用 R 中的内置函数 get.data.frame() 从 igraph 对象获取边缘信息的一种简单方法(我没有注意到问题是在询问python,抱歉):

edges_data_frame <- get.data.frame(your_igraph, what = "edges")

edges_data_frame 的前两列将是 "from" 和 "to"。如果有,下面的列将是边缘的其他属性。