networkx给出错误的邻接矩阵输出

时间:2017-12-03 22:25:59

标签: python pandas dataframe graph networkx

import networkx as nx
import pandas as pd

data1 = { 'node1': [1,1,1,2],
     'node2': [2,3,6,4],
     'weight': [1,1,1,1], }
df1 = pd.DataFrame(data1, columns = ['node1','node2','weight'])

df1.to_csv('training.csv')

df=pd.read_csv('training.csv')
G=nx.from_pandas_dataframe(df1,'node1','node2','weight')
print df1
Adjtraining = nx.adjacency_matrix(G)
print Adjtraining.todense()    

输出:

[[0 1 1 0 1]
 [1 0 0 1 0]
 [1 0 0 0 0]
 [0 1 0 0 0]
 [1 0 0 0 0]]

但实际输出应为:

[[0 1 1 0 0 1]
 [1 0 0 1 0 0]
 [1 0 0 0 0 0]
 [0 1 0 0 0 0]
 [0 0 0 0 0 0]
 [1 0 0 0 0 0]]

这是因为我们可以从数据帧中看到节点是1 2 3 4& 6.节点列表中没有节点5.但它仍然应该包含在邻接矩阵中,但是网络x会忽略它。

1 个答案:

答案 0 :(得分:0)

节点5不会出现在图表中,因为它是由边缘列表实例化的。如果您想在结果邻接矩阵中使用它,您仍然可以将其添加到图表中。

string str = string.Format("Insert into {0}(id, t, v) values({1}, {2}, {3});{4}",tname, lc,mc,rc, Environment.NewLine);

矩阵的索引是:

G = nx.from_pandas_dataframe(df1, 'node1','node2','weight')
G.add_node(5)
adj = nx.adjacency_matrix(G)
print(adj.todense())

[[0 1 1 1 0 0]  
 [1 0 0 0 1 0]  
 [1 0 0 0 0 0]  
 [1 0 0 0 0 0]  
 [0 1 0 0 0 0]  
 [0 0 0 0 0 0]]