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

时间:2016-11-21 08:26:55

标签: python

我正在使用python迭代大量的计算。此示例具有177147个计算,并且它已执行“results.append”10分钟而未完成。我预计这会在几秒钟内完成。有没有更快的方法来实现这一目标?我希望能够在我的现实问题中运行~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))]

2 个答案:

答案 0 :(得分:4)

正如Jon在评论中所说,你的代码正在创建一个 lot 的不必要的列表,这不仅会浪费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

答案 1 :(得分:-4)

你不会喜欢这个答案,但一个很好的方法是Cython。您可能需要创建自己的模块,在C中执行,然后将其放入python中。我从来没有能够做到这一点,但这是我能想到的最简单的加速方式。