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

时间:2015-06-05 07:30:56

标签: python igraph vertex edges

我正在使用:

循环遍历图表的边缘
 for es in graph.es:
         .... 
         # v = []
         # v = es.vertices()?
         ...

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

2 个答案:

答案 0 :(得分:12)

这些是igraph的基本功能,彻底描述了here。 如果您迭代<EdgeSeq>对象(graph.es),则会遍历所有<Edge>个对象(此处为edge)。 <Edge>具有属性sourcetarget。这些是顶点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 = Falseget_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”。如果存在,则以下列将是边的其他属性。