gpt4 book ai didi

python - 使 np.sums 的 for 循环运行得更快的方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:11 25 4
gpt4 key购买 nike

我有这段代码,它迭代矩阵列表,获取它们的 np.sum 并对变量进行加/减。这段代码是我正在处理的一个更大的模拟问题的一部分,由于每次运行整个程序时这段小代码都会运行大约 10mi+ 次,所以我试图使其尽可能高效。有什么办法可以简化这个过程,使其运行得更快吗?我寻找了一些矢量化技巧,但没有发现如何提高效率

#mi could be of any size
mi = np.random.randint(2,size=(4,4))
#the arrays in list_of_blocks could be of any size so the np.sum of the list would end in a ValueError
list_of_blocks = [np.array([[0],[1]]),np.array([[0,0,0],[0,1,0]])]
nee = np.sum(mi)
n1 =0
mrxnr= 0
for block in list_of_blocks:
nee -= np.sum(block)
n1 += np.sum(block)
mrxnr += block.shape[0]*block.shape[1]

最佳答案

矢量化的工作原理是对 numpy 数组应用一些操作,这些数组的数据存储在连续的内存块中。列表的情况并非如此,因此循环对于这种情况似乎没问题。

但是,您的代码中有一些内容需要优化。list_of_blocks 中的数组总是 01 吗?如果是这种情况,count_nonzerosum 快得多。

此外,block.shape[0]*block.shape[1] 相当于 block.size,速度也更快。

最后,neen1 是相关的,因此不需要计算 sum(block) 两次 对于每个循环周期。优化后的代码:

nee = np.sum(mi)
n1 =0
mrxnr= 0
for block in list_of_blocks:
n1 += np.count_nonzero(block)
mrxnr += block.size
nee -=n1

关于python - 使 np.sums 的 for 循环运行得更快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151188/

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