我正在使用python 3.6和networkx 2.1。我从加权边缘列表中导入二分图,然后调用biadjacency矩阵函数并将结果转换为pandas数据帧以对其执行某些操作,如计算一些相关系数(执行这些计算的函数将邻接矩阵作为输入,因此我需要改变我的边缘清单)
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
.
.
.
所以在计算相关系数后,我可以根据我得到的相似性矩阵构建一个网络,但我不知道哪个是谁,谁是谁。关于如何恢复姓名的任何建议?
答案 0 :(得分:1)
来自bipartite.biadjacency_matrix
的文档:
row_order:节点列表 矩阵的行根据节点列表排序。
column_order:list,可选 矩阵的列根据节点列表排序。 如果column_order为None,则列的排序是任意的。
和pd.DataFrame
:
索引:索引或类似数组 用于结果框架的索引。默认为np.arange(n)if 没有索引信息部分输入数据,也没有提供索引
列:索引或类似数组 用于生成框架的列标签。将默认为 np.arange(n)如果没有提供列标签
您推断使用A
和使用nodes1
的列排序矩阵nodes2
行。要在数据框中获得相同的订单,请执行以下操作:
A = pd.DataFrame(A, index=nodes1, columns=nodes2)