gpt4 book ai didi

python - 来自 Pandas Edgelist 数据帧的无向图的邻接矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:30 26 4
gpt4 key购买 nike

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

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

输出:

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

我的代码:

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

我正在寻找可扩展的代码。现在我正在处理具有 100,000 个节点的数据集,并且此代码无法处理如此大的数据集。

最佳答案

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

关于python - 来自 Pandas Edgelist 数据帧的无向图的邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com