一
. 一个(较小的)加速肯定是您的
rows
…
替换
rows = []
for i in range(x):
rows.append([0 for i in xrange(y)])
具有
rows = [[0] * y for i in xrange(x)]
二
. 你也可以通过移动来避免一些查找
random.random
循环之外(节省一点)。
三。
编辑:更正之后——您可以得到如下结果:
def f(x,y,n,z):
rows = [[0] * y for i in xrange(x)]
rn = random.random
for i in xrange(n):
topleft = (int(x*rn()) - z, int(y*rn()) - z)
l = max(0, topleft[1])
r = min(topleft[1]+(z*2), y)
for u in xrange(max(0, topleft[0]), min(topleft[0]+(z*2), x)):
rows[u][l:r] = [j+(j<255) for j in rows[u][l:r]]
编辑:一些新的计时与时间IT(10次运行)--似乎这只提供了轻微的加速:
import timeit
print timeit.Timer("f1(1024,1024,400,75)", "from __main__ import f1").timeit(10)
print timeit.Timer("f2(1024,1024,400,75)", "from __main__ import f2").timeit(10)
print timeit.Timer("f(1024,1024,400,75)", "from __main__ import f3").timeit(10)
f1 21.1669280529
f2 12.9376120567
f 11.1249599457