Convertir el gráfico de python-igraph a networkx

Recientemente he estado trabajando con el paquete python-igraph y todo mi código se basa en los gráficos que creo utilizando igraph. En este momento, necesito calcular algunas medidas para mi gráfico que aparentemente se implementan en networkx y no en igraph como (katz_centrality_numpy, edge_betweenness_centrality, …). Me pregunto si hay una manera de convertir un gráfico a otro entre estos dos paquetes y evitar la lectura de archivos nuevamente, ya que mis archivos son enormes y tienen que repetir el mismo proceso.

Por cierto, cuando paso el gráfico igraph a una función networkx, recibo el siguiente error:

TypeError: 'Graph' object is not iterable 

Gracias 🙂

Puede iniciar un gráfico networkx con bordes:

 Graph([(1,2), (3,4)]) 

Consulte la documentación .

EDITAR:

Así es como se usa (Gracias nimafl por el código):

graph es el gráfico igraph y creamos G que es un gráfico networkx .

 import networkx A = graph.get_edgelist() G = networkx.DiGraph(A) # In case your graph is directed G = networkx.Graph(A) # In case you graph is undirected 

Cuando trato de almacenar nombres de nodos / bordes tanto en igraph como en nx, esta es mi versión de una línea que también transfiere los nombres de los nodos al transferir desde el objeto igraph, g , a nx, G, el resultado:

 G = nx.from_edgelist([(names[x[0]], names[x[1]]) for names in [g.vs['name']] # simply a let for x in g.get_edgelist()], nx.DiGraph()) 

Además, si necesita la forma inversa, eche un vistazo a esta respuesta .

Ok, así que lo descubrí yo mismo. Esto es lo que deberías hacer. Suponiendo que su objeto python.igraph se llama gráfico, creamos un gráfico networkx llamado G de la siguiente manera:

 import networkx as netx A = [edge.tuple for edge in graph.es] # In case your graph is directed G = netx.DiGraph(A) # In case you graph is undirected G = netx.Graph(A) 

graph.es devuelve la lista de bordes del gráfico y luego los agrega a A y, utilizando la matriz A, creamos un gráfico en networkx.

Buena suerte con tus códigos 🙂