timeit.repeat 即使一次操作也比 tic-toc 快得多?
timeit.repeat much faster than tic-toc even for one operation?
我有一个简单的函数 fun
,我想测量它需要多长时间 并且 也会取回值。我认为 Python 的“tic-toc”是要走的路,但我注意到它比 timeit
慢得多(这不是 return 的值):
import numpy as np
import time
import timeit
np.random.seed(0)
x = np.random.rand(10000)
def fun():
return np.sqrt(x)
t0_ns = time.time_ns()
fun()
t1_ns = time.time_ns()
print(t1_ns - t0_ns)
out = timeit.repeat(
stmt=fun,
repeat=1,
number=1,
timer=time.perf_counter_ns,
)
print(out[0])
58002
27037
事实上,timeit.repeat
比函数求值本身快两倍多!这是什么原因?有解决办法吗?
在此处推广 Peter Cordes 对答案的回复。
恢复订单时,
import numpy as np
import time
import timeit
np.random.seed(0)
x = np.random.rand(10000)
def fun():
return np.sqrt(x)
out = timeit.repeat(
stmt=fun,
repeat=1,
number=1,
timer=time.perf_counter_ns,
)
print(out[0])
t0_ns = time.time_ns()
fun()
t1_ns = time.time_ns()
print(t1_ns - t0_ns)
36709
12623
第二次操作又快了。这表明执行速度与计时方法无关,而是与CPU预热效果有关。
我有一个简单的函数 fun
,我想测量它需要多长时间 并且 也会取回值。我认为 Python 的“tic-toc”是要走的路,但我注意到它比 timeit
慢得多(这不是 return 的值):
import numpy as np
import time
import timeit
np.random.seed(0)
x = np.random.rand(10000)
def fun():
return np.sqrt(x)
t0_ns = time.time_ns()
fun()
t1_ns = time.time_ns()
print(t1_ns - t0_ns)
out = timeit.repeat(
stmt=fun,
repeat=1,
number=1,
timer=time.perf_counter_ns,
)
print(out[0])
58002
27037
事实上,timeit.repeat
比函数求值本身快两倍多!这是什么原因?有解决办法吗?
在此处推广 Peter Cordes 对答案的回复。
恢复订单时,
import numpy as np
import time
import timeit
np.random.seed(0)
x = np.random.rand(10000)
def fun():
return np.sqrt(x)
out = timeit.repeat(
stmt=fun,
repeat=1,
number=1,
timer=time.perf_counter_ns,
)
print(out[0])
t0_ns = time.time_ns()
fun()
t1_ns = time.time_ns()
print(t1_ns - t0_ns)
36709
12623
第二次操作又快了。这表明执行速度与计时方法无关,而是与CPU预热效果有关。