%time,%timeit魔法命令

在Jupyter-notebook中有几个用于计时的魔法命令%time%%time%timeit%%timeit,可以非常简单的获取部分代码的运行耗时。

所有以%开头的方法,都是所谓的魔法命令(Magic function),也就是IPython内置的一些方法。魔法方法要区分%%%,以%开头的叫做line magic,是专门针对一行的命令,以%%开头的叫做cell magic,是针对多行(一个cell)的命令。

%%开头的魔法命令,必须放在一个cell的第一行,并且统计该cell中剩余的所有代码。

分别来看:

  • %time

    给出当前行的代码运行一次所花费的时间;

    1
    2
    3
    4
    5
    6
    a,b = 1,2
    %time a,b = b,a

    # output:
    # CPU times: user 2 µs, sys: 1 µs, total: 3 µs
    # Wall time: 5.01 µs

    其中:

    • user:表示执行用户代码(内核外)消耗的CPU时间;
    • sys:表示进程在内核中消耗的CPU时间;

    所以,CPU总耗时看total即可,也就是usetsys之和。

    Wall time是最终总耗时,包括IO、排队的耗时,也就是感知到的总耗时。

    Wall time $<$ CPU 表明进程是计算密集型(CPU bound),利用多核处理器的并行执行优势;

    Wall time $\approx$ CPU 表明进程是计算密集型,未并行执行;

    Wall time $>​$ CPU 表明进程是I/O密集型(I/O bound),多核并行执行优势并不明显;

  • %%time

    给出当前cell的代码运行一次所花费的时间;

    1
    2
    3
    4
    5
    6
    7
    %%time
    a,b = 1,2
    a,b = b,a

    # output:
    # CPU times: user 2 µs, sys: 1e+03 ns, total: 3 µs
    # Wall time: 5.96 µs
  • %timeit -n 1000

    给出当前行的代码运行n次所花费的时间(取最快三次的平均用时);

    1
    2
    3
    4
    %timeit -n 10000 c = pow(2,20)

    # output:
    # 10000 loops, best of 3: 198 ns per loop
  • %%timeit -n 1000

    给出当前cell的代码运行n次所花费的时间(取最快三次的平均用时);

    1
    2
    3
    4
    5
    6
    7
    8
    %%timeit -n 10000
    a,b = 1,2
    c=a
    a=b
    b=c

    # output:
    # 10000 loops, best of 3: 68.5 ns per loop
-------------本文结束感谢您的阅读-------------
0%