I am looping through the edges of a graph with:
for es in graph.es:
....
# v = []
# v = es.vertices()?
...
What method can I use to get the source and the target vertices for each edge?
These are the very basic functionalities of igraph, described here thoroughly.
If you iterate the <EdgeSeq>
object (graph.es
), you will go through all <Edge>
objects (here edge
). <Edge>
has properties source
and target
. These are vertex ids, simply integers. You can get the corresponding <Vertex>
object by 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
Be aware if you have directed graph, otherwise source and target are simply two equivalent endpoints. With directed graphs you may use error = False
with get_eid()
, which then returns -1
in case there is no edge in the given direction between the vertices.