我需要帮助来理解%timeit函数在这两个程序中的作用。
程序A
a = [1,3,2,4,1,4,2]
%timeit [val + 5 for val in a]
830 ns ± 45.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
程序B
import numpy as np
a = np.array([1,3,2,4,1,4,2])
%timeit [a+5]
1.07 µs ± 23.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
我的困惑:
- µs大于ns。NumPy函数的执行速度如何慢于for循环
- 每个环路1.07µs±23.7 ns。。。为什么环路速度是以ns计算的,而不是以µs计算的
Numpy增加了开销,这将影响小型数据集的速度。矢量化在使用大型数据集时非常有用。
你必须尝试更大的数字:
N = 10_000_000
a = list(range(N))
%timeit [val + 5 for val in a]
import numpy as np
a = np.arange(N)
%timeit a+5
输出:
1.51 s ± 318 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
55.8 ms ± 3.63 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)