【发布时间】:2015-10-14 12:14:06
【问题描述】:
我在 python 中有 for 循环,它迭代了近 250 万次,而且需要很长时间才能得到结果。在 JS 中,我可以在将近 1 秒内完成此操作,但 Python 在我的计算机上只需 6 秒即可完成。在这种情况下,我必须使用 Python。代码如下:
for i in xrange(k,p,2):
arx = process[i]
ary = process[i+1]
for j in xrange(7,-1,-1):
nx = arx + dirf[j]
ny = ary + dirg[j]
ind = ny*w+nx
if data[ind] == e[j]:
process[c]=nx
c=c+1
process[c]=ny
c=c+1
matrix[ind]=1
以下是代码中的一些列表:
process = [None] * (11000*4)它的项目在赋值后将被替换为整数。
dirf = [-1,0,1,-1,1,-1,0,1]
dirg = [1,1,1,0,0,-1,-1,-1]
e = [9, 8, 7, 6, 4, 3, 2, 1]
数据列表由来自 rgba 图像像素的“r”个信息组成。
data = imgobj.getdata(0)
我怎样才能提高这一点。我究竟做错了什么?还有其他关于 for 循环的方法吗?谢谢。
【问题讨论】:
-
在我的机器上迭代 250 万次需要 34.9 毫秒(虽然很慢,但并不慢 6 秒)。
-
如果你必须和他们一起工作;你应该问他们:他们做什么?目的是什么?这是一个很好的入门参考:How to optimize for speed
-
numba、numeric python (numpy.org) 或 cython (cython.org) 等库将为您提供一些提高性能的选项
-
另外,请考虑在codereview.SE 上询问有关性能问题和其他工作代码中的一般最佳实践的问题。
标签: python list for-loop iteration