Estoy usando igraph
para generar una matriz de distancias de camino más cortas entre pares de vértices, pero no puedo averiguar cómo devolver los vértices. Hasta ahora tengo:
path_length_matrix = ig_graph.shortest_paths_dijkstra(None,None,"distance", "ALL")
Estoy buscando una función que devuelva una matriz de caminos como la matriz de distancias, pero no puedo ver nada en la documentación de igraph que muestra cómo obtener los caminos.
La función que necesitas es get_shortest_paths
, creo. Consulte http://packages.python.org/python-igraph/igraph.GraphBase-class.html#get_shortest_paths
Debe llamarlo individualmente para cada vértice de origen, y le dará solo una ruta más corta (arbitraria) para cada par de nodos. Si necesita todas las rutas más cortas, consulte get_all_shortest_paths
: http://packages.python.org/python-igraph/igraph.GraphBase-class.html#get_all_shortest_paths
hago esto
from igraph import * g = Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)]) g.vs["name"] = ["Alice", "Bob", "Clair", "Dennis", "Esther", "Frank", "George"] #You could create Vertexes like g.add_vertex(name="Bill") path=g.get_shortest_paths("Alice",to="Frank",mode=OUT,output='vpath') for n in path[0]: print("{}".format(g.vs[n]['name']))
Espero que esto ayude
Esta es la forma de encontrar la ruta más corta para el gráfico dirigido ponderado (DAG). Así que esto es lo que he descubierto:
import igraph from igraph import * g = Graph(directed=True) g.add_vertices(3) g.vs["name"]=["GO:1234567","GO:6789056","GO:5674321"] g.es["weight"]=1 g['GO:1234567','GO:6789056']=1 g['GO:6789056','GO:5674321']=5 weight=g.es["weight"] print weight print g.degree(mode="in") print g.shortest_paths_dijkstra(source="GO:1234567", target="GO:5674321", weights=weight, mode=OUT)