关于魔术命令
Jupyter Notebook 使用的 Python 内核通常是 IPython 内核。IPython 是 Python 的增强交互式解释器,它提供了许多额外的功能,使得在 Jupyter Notebook 中编写和执行 Python 代码更加方便和强大。所以jupyter使用的是IPython的语法
IPython的特殊命令被称为"魔术"命令, 这些命令用来简化常见任务。魔术命令的前缀符号是%
我们先在这里介绍我们接下来将会使用到的几个常用的魔术命令
%run命令
可以在jupyter中使用%run命令来运行任意的python程序文件, 将指定的python脚本加载进来并运行
用法
%run [py程序路径]
%timeit和%time命令
%timeit命令
作用:多次运行单个语句(单行代码)计算平均执行时间, 在估算代码最短时间时有用
%timeit L = [i ** 2 for i in range(1000)]
输出:
195 µs ± 6.06 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
%%timeit可以用来测量单元格代码(多行代码块)执行时间, 并计算平均执行时间, 以评估代码执行性能
%%timeit
# 测试效率
L = []
for n in range(1000):
L.append(n)
输出:
37.2 µs ± 795 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
%time命令(单个语句)和%%time命令(代码块)
单个语句执行一次的时间, 没有办法作为判断代码性能的参考, 因为测试和我们当前操作系统所处的状态,包括是不是正好有一些任务调度等等都有关系, 所以单次运行的时间是不固定的是在某个范围内上下波动的, 所以不应该只看一次运行的时间, 应该多次测量。
有的时候我们只是想感知一下运行时间,并不要这个时间的具体的结果,所以我们进行一次测量%time就足够了。还有一些情况我们很有可能跑一个机器学习的算法,一跑跑好几个小时,那么在这种情况下呢,我们最终想知道我们这个算法一共跑了多少小时我们也只需要测量一次就够了。
在这里,可能有一个陷阱,由于
%timeit
命令,它会多次运行后面的代码行,但是如果后面的代码在多次运行时效率不同,那么测量的结果将会有非常大的偏差。大家看下图中的语句所执行的时间, 可以发现它们相差甚远
那么为什么会产生这么大的时间差距呢?下面我们再试一下, 我们重新用%time的方式进行一次测量
这是因为对于python语言来说, 对sort这个排序函数是相应的有一定的优化的, 对于一个已经排好序的数组, Sort可以非常快的直接完成这个排序, %timeit测的是多次运行的平均时间, 而在运行一次之后列表已经排好序了, 所以后面继续执行的时候列表的顺序已经被排好了, 所以大大的节省了多次运行所花的时间, 进而所测出的平均时间相对于%time小很多
下面是在jupyter中的示例code:
%run–将我们创建的python模块加载到当前文件中并运行
%run Pycharm—project/example.py
%timeit