为什么Python循环在内部计时比在外部计时快?

2024-05-15 16:59:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对我的函数进行计时,以确定高执行时间的来源,并注意到循环内的累积时间远低于循环本身的时间

我使用一个全局变量Node.sstats来存储累积时间,即在每次迭代中,存储总时间的变量都会增加

我简化了我的代码,但我不相信它改变了问题。I循环计时(t3-t2)以及循环内的累积时间(t5-t4)。t3-t2的时间比t5-t4大10倍。因此,循环时间远大于循环内容的累积时间。我还检查了全局变量Node.ksstats(t5b-t5)的更新时间与总循环时间相比并不显著(<;1%)。那么,循环机制本身是原因还是与内存访问有关

这是我的密码

t2 = time.time()
for a in range(0, d):
    t4 = time.time()
    
    t6 = time.time()
    kurt[a], moments[a] = ik.incr_kurtosis(X[:,a], moments[a])
    t7 = time.time()
      
    Node.ksstats[2] += (t7- t6)
    kurt[a] = log(kurt[a] + 1)
    summ += kurt[a]
   
    # measure the cumulative time of the loop contents         
    t5 = time.time()
    Node.ksstats[3] += (t5-t4)
    # measure cumulative time to update ksstats variable

    t5b= time.time()
    Node.ksstats[5] += (t5b-t5)

# time entire for loop
t3 = time.time()
Node.ksstats[4] += (t3 - t2)

更新

我仍然不确定发生了什么,但我通过更新循环中的本地ksstats变量而不是类变量Node.ksstats,使循环的内部时间和外部时间相等


Tags: nodefortime时间计时t3t2moments