Recently I've been working with python-igraph package and all my code is based on graphs I create using igraph. Right now, I need to calculate some measures for my graph which apparently are implemented in networkx and not in igraph such as (katz_centrality_numpy, edge_betweenness_centrality, ...). I am wondering if there is a way to convert one graph to another between these two packages and to avoid reading from files again since my files are huge and have to repeat the same process alot.
By the way, when I pass the igraph graph to a networkx function I receive the following error:
TypeError: 'Graph' object is not iterable
Thanks :)
You can initiate a networkx graph with edges:
Graph([(1,2), (3,4)])
See the documentation.
EDIT:
This is how to use it (Thank you nimafl for the code):
graph
is the igraph
graph and we create G
which is a networkx
graph.
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
As I try to store names of nodes/edges on both igraph or nx, this is my one-liner version which also transfers nodes names while transferring from igraph object, g
, to nx, G, the result:
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())
Also if you need the reverse way, have a look at this answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With