我正在使用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))]
答案 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中。我从来没有能够做到这一点,但这是我能想到的最简单的加速方式。