优化Python for循环

bhe*_*ilr 4 python optimization

我有一个循环,这是我最大的时间吮吸一个特定的功能,我想加快它.目前,这个单循环占用大约400ms,而其余功能的执行大约需要610ms.

代码是:

for ctr in xrange(N):
    list1[ctr] = in1[ctr] - in1[0] - ctr * c1
    list2[ctr] = in2[ctr] - in2[0] - ctr * c2
    list3[ctr] = c3 - in1[ctr]
    list4[ctr] = c4 - in2[ctr]
Run Code Online (Sandbox Code Playgroud)

N可以是大约40,000到120,000之间的任何值,并且是显示的所有列表(in1,in2,listN)的长度.

有谁知道一些Python技巧来加快这个速度?我已经尝试过使用map,因为我知道它会尝试编译为更高效的代码,但速度大约慢了250ms.

谢谢

Joe*_*ton 9

假设list1,list2等等,都是数字,可以考虑使用,而不是列出numpy的阵列.对于大整数或整数的浮点数,你会看到一个巨大的加速.

如果你走那条路,上面的循环可以像这样写:

ctr = np.arange(N)
list1 = n1 - n1[0] - ctr * c1
list2 = n2 - n2[0] - ctr * c2
list3 = c3 - ctr
list4 = c4 - ctr
Run Code Online (Sandbox Code Playgroud)

作为计时的完整独立示例:

import numpy as np
N = 100000

# Generate some random data...
n1 = np.random.random(N)
n2 = np.random.random(N)
c1, c2, c3, c4 = np.random.random(4)

ctr = np.arange(N)
list1 = n1 - n1[0] - ctr * c1
list2 = n2 - n2[0] - ctr * c2
list3 = c3 - ctr
list4 = c4 - ctr
Run Code Online (Sandbox Code Playgroud)

当然,如果你的list1,list2等等是非数字的(即浮点数或整数以外的python对象列表),那么这将无济于事.