在IPython和Jupyter Notebook 高效magic命令。
magic命令:Jupyter Notebook中的特殊命令,使用%符号和要运行的命令一起使用。
%%time
- 功能:用于执行并反馈将代码运行一次后所花费的时间。输出CPU time(代码实际消耗的CPU运行时间)和Wall time(墙上挂钟时间, 代码从开始到结束所花费的,实际感受的运行时间)。
- 使用条件:在IPython和Jupyter Notebook中,必须放在测试单元代码的第一行,在%%time换行后,输入想要计时的一段或多段代码。
- 用途:
- 性能分析:提供代码运行时间信息。
- 代码执行时间评估:通过查看输出CPU时间和墙上时间,进而更全面的了解代码的运行时间。CPU 时间用于分析代码本身消耗的处理器资源,而墙上时间则反映了用户实际感受到的耗时。
%time
- 功能:将会给出当前行的代码运行一次后所花费的时间。输出Wall time(墙上时间, 代码从开始到结束所花费的实际时间)和代码运行结果。
- 使用条件:在IPython和Jupyter Notebook中,放在测试单元代码的第一行,在%time同行空格后,输入想要计时的一段或多段代码。
- 用途:检查代码运行时间并输出代码运行结果。
- 注意:也可以使用time库(import time),利用time.localtime(time.time()),返回当前时间的时间戳方法来计算时间间隔。
eit -r R -n N
- 功能:将执行代码语句运行R次,每次N遍,再对N * R 遍的运行结果取平均从而得到运行一遍代码的时间。
- 使用条件:在IPython和Jupyter Notebook中,必须放在测试单元代码的第一行,在%%timeit换行后,输入想要计时的一段或多段代码。如果放置在同行,则同行代码运行但不计时,从第二行才开始计时。
- 用途:检查代码运行时间并输出代码运行结果。
- 注意:%timeit的运行比%time执行时间快,在于%timeit内有额外的机制,用于防止系统调用(System calls)影响程序执行的时间结果。
%prun:
- 功能:宏观性能分析工具,用于计算函数或程序执行每个函数需要多长时间。
- 使用条件:在IPython和Jupyter Notebook中,放在测试单元代码的第一行,在%prun同行空格后,输入想要计时的一段或多段代码。结果返回列表,列表中是每个内部函数被调用次数、每次被调用时间、函数所有运行的累积时间。
%lprun:
- 功能:微观性能分析工具,逐行计算程序性能,从而判断哪一行执行时间最长,进而优化那部分程序。
- 使用条件:需要安装第三方库: pip install line_profiler,在IPython中加载套件后,执行%lprun来计算函数的逐条性能。
%mprun:
- 功能:使用单个语句执行的内存计算工具和代码一起执行。
- 使用条件:限制在独立模块上,不能应用在notebook上运行。
%memit:
- 功能:计时单个语句占用的内存空间。
- 使用条件:需要安装第三方库: pip install memory_profiler,在IPython中加载套件后,执行%memit来计算函数的逐条性能,从peak memory中。
%who
- 功能:在jupiter Notebook中显示所有可用变量。
- 使用条件:单独一行。
%history or %hist
- 功能:在jupiter Notebook中查看活动日志,并跟踪已经做过的内容。
- 使用条件:单独一行。
%pinfo
- 功能:在jupiter Notebook中查看对象、包的详细信息(包括类型、长度、文件地址等)。
- 使用条件:单独一行。pinfo 包名或对象名。
%%writefile
- 功能:在jupiter Notebook中用于在当前目录中,保存复用函数到Python文件中。
- 使用条件:单独一行,文件开头。%%writefile 文件名.py。
%pycat
- 功能:用于在当前目录中,读取Python文件中的复用函数到jupiter Notebook中,在新弹出窗口中显示文件中的所有代码。
- 使用条件:%pycat 文件名.py
%quickref
- 功能:在jupiter Notebook中,详细解释所有jupiter Notebook中存在的所有magic命令。
- 使用条件:单独一行 %quickref。
Jupiter Notebook和Pycharm使用差异:
- 命令中的数据集是否需要从网络中下载,还是直接运行本地数据集:
- Jupiter Notebook:在本地浏览器环境中使用,网络(例如Github)数据集和本地数据集都可以正常使用。
- Pycharm:除非设置好代理和打开防火墙,否则只能使用本地数据集,使用网络数据集会因为连接超时报错。