【问题标题】:Convert python-igraph graph to networkx将 python-igraph 图转换为 networkx
【发布时间】:2015-04-21 21:52:34
【问题描述】:

最近我一直在使用 python-igraph 包,我所有的代码都基于我使用 igraph 创建的图形。现在,我需要为我的图计算一些度量,这些度量显然是在 networkx 中实现的,而不是在 igraph 中,例如 (katz_centrality_numpy, edge_betweenness_centrality, ...)。我想知道是否有一种方法可以在这两个包之间将一个图表转换为另一个图表,并避免再次从文件中读取,因为我的文件很大并且必须重复相同的过程。

顺便说一句,当我将 igraph 图传递给 networkx 函数时,我收到以下错误:

TypeError: 'Graph' object is not iterable

谢谢:)

【问题讨论】:

  • 您可以创建一个新的 networkx 图 - 只需获取 igraph 的边缘并用它们生成一个 networkx 图
  • @EllaShar 知道networkx 中的什么方法吗?

标签: python converter igraph networkx


【解决方案1】:

您可以使用边启动 networkx 图:

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

the documentation

编辑:

这是如何使用它(感谢nimafl提供代码):

graphigraph 图表,我们创建G 这是一个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

【讨论】:

  • 感谢 Ella,这帮助我弄清楚了如何解决我的问题 :)
  • 实际上,如果您有度数为 0 的节点,您将丢失从 igraph 传递到 networkx 的那些节点
【解决方案2】:

当我尝试在 igraph 或 nx 上存储节点/边的名称时,这是我的单行版本,它在从 igraph 对象g 传输到 nx、G 时也传输节点名称,结果:

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())

另外,如果您需要相反的方式,请查看this answer

【讨论】:

    【解决方案3】:

    好的,我自己想通了。这是你应该做的。假设您的 python.igraph 对象被称为 graph 我们创建了一个名为 G 的 networkx 图,如下所示:

    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 返回图边列表,然后将它们全部添加到 A 并使用矩阵 A 在 networkx 中创建一个图。

    祝你的代码好运:)

    【讨论】:

    • 不用写[edge.tuple for edge in graph.es],你可以直接写graph.get_edgelist()——它可能会快一点。
    【解决方案4】:

    最佳答案效果很好,但以防万一需要保留节点的顺序(以便对 mNgraph.nodes 进行排序),并且 igraph.Graph 没有节点名称,请考虑使用类似

    mNgraph = networkx.Graph()
    mNgraph.add_nodes_from(range(mIgraph.vcount()))
    mNgraph.add_edges_from(mIgraph.get_edgelist())
    

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 1970-01-01
      • 2019-10-05
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多