使用%timeit缓存结果

时间:2017-09-10 02:54:55

标签: python python-3.x numpy timeit

我正在尝试优化小函数,将元素中两个向量元素的比较返回到python 3上的数组中,并且我一直在使用timeit模块来查看wat代码运行情况最佳。

在尝试我的两个功能之一时,我正在遇到此消息The slowest run took 4.84 times longer than the fastest. This could mean that an intermediate result is being cached.

在我看来,没有任何东西可以缓存在函数上,而我正在测试的另一个函数从不显示此消息,所以我认为timeit是正确的,当它告诉我某些内容正在缓存时,但是我不明白为什么。

这是功能:

import numpy as np

TP_v=np.array(TP_vect)
SL_v=np.array(SL_vect)
size=49

def k():
    TP_arr = np.reshape(np.repeat(TP_v,size),(size,size),order='F')
    SL_arr = np.reshape(np.repeat(SL_v,size)[::-1],(size,size),order='A')
    return((SL_arr > TP_arr)*1 - (SL_arr < TP_arr)*1)

我正在测试的另一个,它不显示缓存消息:

def f():        
    ar1=[]
    for i in SL_v[::-1]:
        ar2=[]
        for j in TP_v:
            if j>i:
                ar2.append(-1)
            elif j==i:
                ar2.append(0)
            else:
                ar2.append(1)
        ar1.append(ar2)
    return ar1

这可能是一个愚蠢的问题,但我实际上很好奇,因为运行时间的5倍差异非常大,我不知道结果timeit是否给我准确。

如果有人知道的话,我真的很高兴知道是什么原因引起的。

由于

PS:如果您认为其中一项功能没有优化,请不要犹豫告诉我:)

编辑:我有点理解缓存的结果意味着什么,但我不知道我的代码中的原因是什么,显然使用的是np.reshape;我认为我必须考虑到最慢的结果?

0 个答案:

没有答案