gpt4 book ai didi

python - 快速 python 矩阵创建和迭代

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:52 25 4
gpt4 key购买 nike

我需要从权重矩阵的值开始创建一个矩阵。在创建和迭代矩阵时,哪种结构在速度方面保持矩阵的最佳结构?我在考虑一个列表列表或一个 numpy 二维数组,但它们对我来说似乎都很慢。我需要什么:

numpy array
A = np.zeros((dim, dim))
for r in range(A.shape[0]):
for c in range(A.shape[0]):
if(r==c):
A.itemset(node_degree[r])
else:
A.itemset(arc_weight[r,c])

list of lists
l = []
for r in range(dim):
l.append([])
for c in range(dim):
if(i==j):
l[i].append(node_degree[r])
else:
l[i].append(arc_weight[r,c])

其中 dim 也可以是 20000 ,node_degree 是一个向量,arc_weight 是另一个矩阵。我用c++写的,用时不到0.5秒,而另外两个用python写的要20多秒。我知道 python 不是 c++,但我需要尽可能快。谢谢大家。

最佳答案

有一件事是,如果您已经知道列表的大小,则不应将其附加到列表中。

首先使用列表理解预分配内存并使用 xrange() 而不是 range() 生成 r, c 值,因为你是使用 Python < 3.x(参见 here):

l = [[0 for c in xrange(dim)] for r in xrange(dim)]

更好的是,您可以使用以下方法一次性构建您需要的内容:

l = [[node_degree[r] if r == c else arc_weight[r,c] 
for c in xrange(dim)] for r in xrange(dim)]

与您的原始实现相比,这应该使用更少的内存(因为 xrange() 生成器)和更少的时间,因为您无需通过预先指定维度来重新分配内存。

关于python - 快速 python 矩阵创建和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939136/

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