繁体   English   中英

如何加快python中的迭代计算速度?

[英]How do I speed up iterative calculations in python?

我正在使用python迭代大量计算。 该示例进行了177147次计算,并且已经执行了10分钟的“ results.append”,没有完成。 我预计这将在几秒钟内完成。 有没有更快的方法可以做到这一点? 我希望能够在我的实际问题中运行约100,000,000个计算。

import itertools

a=[1]
b=[1]
c=[1,2,3]
d=[1,2,3]
e=[1,2,3]
f=[1,2,3]
g=[1,2,3]
h=[1,2,3]
i=[1,2,3]
j=[1,2,3]
k=[1,2,3]
l=[1,2,3]
m=[1,2,3]

params=list(itertools.product(a,b,c,d,e,f,g,h,i,j,k,l,m))

def TestFunction(a,b,c,d,e,f,g,h,i,j,k,l,m):
    output=a+b+c+d+e+f+g+h+i+j+k+l+m
    return output

results=[]
[results.append(TestFunction(*list(params)[x]))for x in range(len(params))]

正如乔恩(Jon)在评论中所说,您的代码正在创建许多不必要的列表,这不仅浪费RAM,还需要时间。 这是代码的优化版本,可以在我的旧2GHz 32位计算机上执行大约半秒。

from itertools import product

data = (
    [1],
    [1],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3],
)

def TestFunction(a, b, c, d, e, f, g, h, i, j, k, l, m):
    return a + b + c + d + e + f + g + h + i + j + k + l + m

results = [TestFunction(*params) for params in product(*data)]
print(len(results))

产量

177147

您可能不会喜欢答案,但是Cython是解决问题的一个好方法。 您可能需要制作自己的模块,用C进行处理,然后将其放入python中。 我从来没有能够做到这一点,但这是我想到的最简单的加速方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM