Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无向图边列表数据框的邻接矩阵_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 无向图边列表数据框的邻接矩阵

Python 无向图边列表数据框的邻接矩阵,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我想从pandas dataframe创建一个邻接矩阵。dataframe具有无向图的边列表 输出: data1 = { 'node1': [1,1,1,2], 'node2': [2,3,5,4], 'weight': [1,1,1,1], } df1 = pd.DataFrame(data1, columns = ['node1','node2','weight']) 我的代码: 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0

我想从pandas dataframe创建一个邻接矩阵。dataframe具有无向图的边列表

输出:

data1 = { 'node1': [1,1,1,2],
     'node2': [2,3,5,4],
     'weight': [1,1,1,1], }
df1 = pd.DataFrame(data1, columns = ['node1','node2','weight'])
我的代码:

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

我正在寻找可伸缩的代码。目前我正在使用的数据集有100000个节点,而这段代码无法处理如此大的数据集

为什么不使用networkx执行此任务?@enyard如何在networkx中执行?从Pandas DataFrame返回一个图形。@enyard我想要一个邻接矩阵作为输出抱歉,如果我出错了,为什么您的邻接矩阵有4x4输入和5x5输出?
def adjmat():
    print 'begun creating adjen mat'
    data = sc.loadtxt('training.csv', dtype='str', delimiter=',',skiprows=1)
    data = sc.transpose(data)
    row1 = data[1].astype(int)
    row2 = data[2].astype(int)
    weight=data[3].astype(int)
    n=0
    n1=0
    n2=0


    n1=max(row1)
    n2=max(row2)

    if n1>n2:

        Amat=sc.zeros((n1,n1))
        #matrix=sc.zeros((n1,n1))
        n=n1


    else:
        Amat=sc.zeros((n2,n2))
        #matrix=sc.zeros((n2,n2))
        n=n2


    for i in range(0,len(row1)):

        row=row1[i]
        col=row2[i]

        Amat[row-1][col-1]=weight[i]

    i_lower = np.tril_indices(n, -1)
    Amat[i_lower] = Amat.T[i_lower]



    return Amat 
Using networkx.....

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

Adjtraining = nx.adjacency_matrix(G)

print Adjtraining.todense()

output

[[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]]