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.
谢谢
假设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对象列表),那么这将无济于事.