我正在尝试优化小函数,将元素中两个向量元素的比较返回到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;我认为我必须考虑到最慢的结果?