我正在使用python 3.6和networkx 2.1。我从加权边列表中导入一个二分图,然后调用双邻接矩阵函数并将结果转换为熊猫数据帧以对其执行一些操作,例如计算一些相关系数(执行这些计算的函数将邻接矩阵作为输入,因此我需要转换我的边表(
import pandas as pd
from networkx import bipartite
A=bipartite.biadjacency_matrix(G, nodes1, nodes2).todense()
A=pd.DataFrame(A)
事实是,当我调用bipartite.biadjacency_matrix()
时,我丢失了节点的名称,生成的数据帧如下所示:
0 1 2 3 4 5 6 7 8 9 ... 13 14 15 16 17 18 19
0 0 0 0 1 0 0 0 0 0 0 ... 0 11 0 2 0 2 1
1 0 0 0 0 0 0 0 0 0 0 ... 1 23 2 0 0 3 5
2 0 0 0 0 0 0 0 0 1 0 ... 3 24 3 5 0 3 5
3 0 0 0 0 0 0 0 0 0 0 ... 0 18 0 2 0 0 1
4 0 0 0 0 0 0 0 0 1 0 ... 1 17 4 8 0 4 2
.
.
.
因此,在计算相关系数后,我可以根据我得到的相似性矩阵构建一个网络,但我不知道哪个是哪个,谁是谁。关于如何恢复名称的任何建议?
来自bipartite.biadjacency_matrix
的文档:
row_order : 节点列表 矩阵的行根据节点列表进行排序。
column_order:列表,可选 矩阵的列根据节点列表进行排序。 如果column_order为"无",则列的排序是任意的。
和从pd.DataFrame
:
索引:索引或类似数组 用于生成帧的索引。将默认为 np.arange(n( 如果 输入数据没有索引信息部分,也没有提供索引
列:索引或类似数组 用于生成框架的列标签。将默认为 np.arange(n( 如果未提供列标签
您可以推断矩阵A
行使用 nodes1
排序,列使用 nodes2
排序。若要在数据帧中获取相同的顺序,只需
A = pd.DataFrame(A, index=nodes1, columns=nodes2)