其他分享
首页 > 其他分享> > 矩阵熊猫的邻接表

矩阵熊猫的邻接表

作者:互联网

我正在尝试通过一个玩具示例,从列表中构建邻接矩阵,但现在我还不太清楚.我在考虑.loc()的问题,但不确定如何正确编制索引.

{'nodes':['A', 'B', 'C', 'D', 'E'],
 'edges':[('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'E'), ('C', 'D'), 
                      ('D', 'E'), ('E', 'A'),('E', 'B'), ('E', 'C')]}

我开始用以下方法构建矩阵:

n = len(graph['nodes'])
adj_matr = pd.DataFrame(0, columns = graph['nodes'], index = graph['edges'])

但现在我不确定如何填写.我认为这里面很简单,也许有列表理解能力?

预期产量:

   A  B  C  D  E
A  0  1  0  1  0
B  0  0  1  0  1
C  0  0  0  1  0
D  0  0  0  0  1
E  1  1  1  0  0

解决方法:

一种获取邻接矩阵的简单方法是使用NetworkX

d = {'nodes':['A', 'B', 'C', 'D', 'E'],
     'edges':[('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'E'), ('C', 'D'), 
                      ('D', 'E'), ('E', 'A'),('E', 'B'), ('E', 'C')]}

从您的邻接矩阵看来,该图是有向的.您可以创建如下所示的有向图,并使用以下命令从字典中定义其节点和边:

import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(d['nodes'])
g.add_edges_from(d['edges'])

然后,您可以从网络中获得nx.adjacency_matrix的邻接矩阵:

m = nx.adjacency_matrix(g)
m.todense()

matrix([[0, 1, 0, 1, 0],
        [0, 0, 1, 0, 1],
        [0, 0, 0, 1, 0],
        [0, 0, 0, 0, 1],
        [1, 1, 1, 0, 0]], dtype=int64)

对于将相应节点作为列的数据框,您可以执行以下操作:

pd.DataFrame(m.todense(), columns=nx.nodes(g))

   A  B  C  D  E
0  0  1  0  1  0
1  0  0  1  0  1
2  0  0  0  1  0
3  0  0  0  0  1
4  1  1  1  0  0

标签:adjacency-list,adjacency-matrix,pandas,dataframe,python
来源: https://codeday.me/bug/20191108/2006275.html