来自numpy或pandas邻接矩阵的igraph图 - python

我有一个存储为pandas.DataFrame的邻接矩阵:

node_names = ['A', 'B', 'C']
a = pd.DataFrame([[1,2,3],[3,1,1],[4,0,2]],
    index=node_names, columns=node_names)
a_numpy = a.as_matrix()

我想根据igraph.Graphpandas邻接矩阵创建numpy。在理想的世界中,节点将按预期命名。

这可能吗? The tutorial在此问题上似乎保持沉默。

参考方案

在igraph中,您可以使用 igraph.Graph.Adjacency 从邻接矩阵创建图形,而不必使用zip。使用加权邻接矩阵并将其存储在np.arraypd.DataFrame中时,需要注意一些事情。

  • igraph.Graph.Adjacency不能将np.array作为参数,但这可以使用 tolist 轻松解决。
  • 邻接矩阵中的整数被解释为节点之间的边数而不是权重,这是通过使用邻接作为布尔值来解决的。
  • 有关如何执行此操作的示例:

    import igraph
    import pandas as pd
    
    node_names = ['A', 'B', 'C']
    a = pd.DataFrame([[1,2,3],[3,1,1],[4,0,2]], index=node_names, columns=node_names)
    
    # Get the values as np.array, it's more convenenient.
    A = a.values
    
    # Create graph, A.astype(bool).tolist() or (A / A).tolist() can also be used.
    g = igraph.Graph.Adjacency((A > 0).tolist())
    
    # Add edge weights and node labels.
    g.es['weight'] = A[A.nonzero()]
    g.vs['label'] = node_names  # or a.index/a.columns
    

    您可以使用 get_adjacency 通过以下方式重建邻接数据框:

    df_from_g = pd.DataFrame(g.get_adjacency(attribute='weight').data,
                             columns=g.vs['label'], index=g.vs['label'])
    (df_from_g == a).all().all()  # --> True
    

    在返回'Response'(Python)中传递多个参数 - python

    我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

    如何修复AttributeError:模块'numpy'没有属性'square' - python

    Improve this question 我已经将numpy更新为1.14.0。我使用Windows10。我尝试运行我的代码,但出现此错误: AttributeError:模块“ numpy”没有属性“ square”这是我的进口商品:%matplotlib inline import matplotlib.pyplot as plt import ten…

    numpy.savetxt“元组索引超出范围”? - python

    我试图在文本文件中写几行,这是我使用的代码:import numpy as np # Generate some test data data = np.arange(0.0,1000.0,50.0) with file('test.txt', 'w') as outfile: outfile.write('…

    Python exchangelib在子文件夹中读取邮件 - python

    我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

    Python:如何停止多线程的numpy? - python

    我知道这似乎是一个荒谬的问题,但是我必须在与部门中其他人共享的计算服务器上定期运行作业,当我开始10个作业时,我真的希望它只占用10个核心而不是更多;我不在乎每次运行一个内核所需的时间是否更长:我只是不想让它侵犯其他人的领土,这将需要我放弃工作等等。我只想拥有10个核心,仅此而已。更具体地说,我在基于Python 2.7.3和numpy 1.6.1的Redh…