gpt4 book ai didi

python - numpy/scipy 从加权边缘列表构建邻接矩阵

转载 作者:行者123 更新时间:2023-11-28 21:51:56 26 4
gpt4 key购买 nike

我正在读取一个加权的 egdelist/numpy 数组,例如:

0 1 1
0 2 1
1 2 1
1 0 1
2 1 4

其中列为“User1”、“User2”、“Weight”。我想使用 scipy.sparse.csgraph.depth_first_tree 执行 DFS 算法,它需要一个 N x N 矩阵作为输入。我如何将之前的列表转换为方阵:

0 1 1
1 0 1
0 4 0

在 numpy 或 scipy 中?

感谢您的帮助。

编辑:

我一直在处理一个巨大的(1.5 亿个节点)网络,所以我正在寻找一种内存高效的方法来做到这一点。

最佳答案

您可以使用节省内存的 scipy.sparse matrix :

import numpy as np
import scipy.sparse as sparse

arr = np.array([[0, 1, 1],
[0, 2, 1],
[1, 2, 1],
[1, 0, 1],
[2, 1, 4]])
shape = tuple(arr.max(axis=0)[:2]+1)
coo = sparse.coo_matrix((arr[:, 2], (arr[:, 0], arr[:, 1])), shape=shape,
dtype=arr.dtype)

print(repr(coo))
# <3x3 sparse matrix of type '<type 'numpy.int64'>'
# with 5 stored elements in COOrdinate format>

要将稀疏矩阵转换为密集的 numpy 数组,您可以使用 todense:

print(coo.todense())
# [[0 1 1]
# [1 0 1]
# [0 4 0]]

关于python - numpy/scipy 从加权边缘列表构建邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146892/

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