目录

  • 魔法命令行(Magic command system)
  • 查看变量 who/whos
  • 两类 Magic commands
  • 计时命令 time/timeit
  • 补充:Wall Clock/Cpu time
    • 基本概念
    • 关系
  • 测试每一部分的运行时间 prun

魔法命令行(Magic command system)

IPython 可以让我们在 jupyter notebook 里实现命令行的操作,比如下列语句

In [1]: %cd
/home/fperez
In [2]: cd mydir
/home/fperez/mydir

需要在命令前面加上 %。(不加其实也可以使用,只是需要注意命令会被变量名所覆盖)

In [1]: cd ipython     # %cd is called by automagic
/home/fperez/ipythonIn [2]: cd=1           # now cd is just a variableIn [3]: cd ..          # and doesn't work as a function anymore
File "<ipython-input-3-9fedb3aff56c>", line 1cd ..^
SyntaxError: invalid syntaxIn [4]: %cd ..         # but %cd always works
/home/fperezIn [5]: del cd     # if you remove the cd variable, automagic works againIn [6]: cd ipython/home/fperez/ipython

可以安装各种 python 的库

%pip install [pkgs]

查看变量 who/whos

在jupyter中查看变量以及变量的详细信息都可以用魔法函数 (Magic Function),可参考如下

首先,定义变量a、b以及一个类。

class testClass:"""This class is for testing ipython magic function"""def __init__(self, a, b):self.a = aself.b = bdef method1(self):"""This is method1"""print("This is method1!")my_test = testClass(1, 100)alpha = 123
beta = 'test'
  • %who 查看有全部变量、函数等。
  • %who [Type] 查看特定类型的变量、函数等
  • %whos 查看变量、函数的详细信息

图中可以看到 my_test 的 Type 是我们定义的testClass 这个类

  • %who_ls 以 list 形式输出

两类 Magic commands

jupyter 中有两种 Magic commands,分别是

  • Line Magics (% prefix)
  • Cell Magics (%% prefix)

Line Magics 只能作用于他们所在的行;Cell Magics 作用于他们所在的整个 cell,需要注意的是,Cell Magics 必须在 cell 的第一行(甚至需要在注释之前)。

知道了这个就能更好的理解下面的计时部分

计时命令 time/timeit

  • %time 将会给出当前行的代码运行一次所花费的时间
  • %%time 将会给出当前整个 cell 中代码的执行时间
  • %timeit 将会执行一个语句70000次(默认情况下),然后给出运行最快3次的平均值,如下图

    完整语法如下:
%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement
    • -n<N>: 循环 <N> 次执行给定的语句,如果 n 没有提供,那么将根据足够的精度来自动确定 n
    • -r<R>: 重复 <R> 次,每次重复包含<N> 次循环。默认为7
    • -t: 测量时间的单位,默认为 Unix 时间,这个是用来测量 wall time
  • -c: 测量时间的单位,默认为 Unix 时间,这个是用来测量 CPU user time.
    • -p<P>: 输出精度,默认 3
    • -q: 退出,不打印结果
    • -o: 返回一个可以被保存被查看的变量 TimeitResult

  • %%timeit 是对一个 cell 进行操作

补充:Wall Clock/Cpu time

基本概念

Wall clock time 用来度量实际消耗了多少时间 (real time),也就是字面意思“墙上的时钟”。从进行开始执行到完成所经历的 wall clock time,包括其他进程使用的时间片 (time slice)本进程耗费在阻塞 (如等待I/O操作完成) 上的时间

CPU time 是指 CPU 消耗时间的总和,包括 user time 和 sys time

  • user time 是进程执行用户态代码(内核外)耗费的CPU时间,仅统计该进程执行时实际使用的CPU时间,而不计入其他进程使用的时间片和本进程阻塞的时间
  • sys time 是该进程在内核态运行所耗费的CPU时间,即内核执行系统调用所使用的CPU时间

关系

如果是一个CPU,那么 CPU time 一定总是小于 real time。但是如果是多处理器,那么总 CPU time 可能会超过 real time。因为多进程中 CPU time 会进行累积。

单线程处理:

  • CPU / real ≈ 1: 处理时间大部分小号在使用 CPU 上。那么此时更快的 CPU 让我们的程序运行更快。可利用多核处理器的并行执行优势
  • CPU / real < 1: 如果这个比例越小,那么说明我们越多的处理时间消耗在等待上(比如网络、硬盘、其他进程释放 CPU、睡眠等)。比如,CPU / real 是 0.75, 那么 25% 的时间消耗在等待上。多核并行执行优势并不明显

多进程处理:(如果是个多线程,并且电脑有 N 个 CPU,最小 N 线程,那么 CPU / real 最高是 N)

  • CPU / real < 1: 进程大部分时间消耗在等待上。
  • CPU / real ≈ N: 进程已经在 CPU 上饱和了。
  • Other values: 进程是等待和 CPU 运行的某种组合,这个时候我们很难通过只看两种 time 来判断我们的瓶颈(bottleneck)在哪。

测试每一部分的运行时间 prun

可参考以下示例

import pandas as pd
import numpy as npdf = pd.DataFrame({'a': np.random.randn(1000),'b': np.random.randn(1000),'N': np.random.randint(100, 1000, (1000)),'x': 'x'})def f(x):return x * (x-1)def integrate_f(a, b, N):s = 0     dx = (b - a) / Nfor i in range(N):s += f(a + i * dx)return s * dx
%prun -l 4 df.apply(lambda x: integrate_f(x['a'], x['b'], x['N']), axis=1)Out:661861 function calls (656852 primitive calls) in 0.267 secondsOrdered by: internal timeList reduced from 141 to 4 due to restriction <4>ncalls  tottime  percall  cumtime  percall filename:lineno(function)1000    0.136    0.000    0.196    0.000 <ipython-input-10-d33f40f5bef5>:1(integrate_f)543296    0.061    0.000    0.061    0.000 <ipython-input-9-30a8062c568e>:1(f)3000    0.008    0.000    0.046    0.000 base.py:2454(get_value)3000    0.005    0.000    0.053    0.000 series.py:598(__getitem__)

可以看到,程序运行的大部分时间都消耗在 integrate_f 和 f 函数上。

参考资料:
https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-timeit
https://pythonspeed.com/articles/blocking-cpu-or-io/#:~:text=Wall%20clock%20time%20measures%20how,seconds%20the%20CPU%20was%20busy.&text=sys%20%3A%20the%20operating%20system%20CPU,system%20calls%20from%20the%20process.
https://blog.csdn.net/filyouzicha/article/details/52447887
https://blog.csdn.net/fpy192/article/details/100001765

jupyter notebook 常用魔法函数 Magic Function%time %timeit %who %pip %cd相关推荐

  1. Jupyter notebook Ipython 魔法函数 Magic 计算代码(函数)耗时 Timing(%%time %time %timeit)

    1.%%time 将会给出cell的代码运行一次所花费的时间. 2.%time 将会给出当前行的代码运行一次所花费的时间. 3.%timeit 使用Python的timeit模块,它将会执行一个语句1 ...

  2. python魔法方法与函数_在Python中画图(基于Jupyter notebook的魔法函数)

    这篇文章主要介绍了在Python中画图(基于Jupyter notebook的魔法函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先展示一段相 ...

  3. jupyter notebook之魔法函数

    魔法函数 使用魔法函数可以简单的实现一些单纯python要很麻烦才能实现的功能. 一些常用魔法函数的示例: 注意这些命令是在Python kernel中适用的,其他 kernel 不一定适用 转自:h ...

  4. Jupyter Notebook 常用魔法命令

    Jupyter NoteBook 是功能强大的Python交互IDE,深受数据分析师和算法工程师的热爱.Jupyter NoteBook 在综合使用文字.代码.图片等多种元素展示设计者的想法方面有着美 ...

  5. jupyter notebook如何查看函数

    jupyter notebook如何查看函数 存在以下3种方式: a.按下shift+tab b.利用help()函数 c.函数名后直接+? 例如: import numpy as np np.arr ...

  6. Jupyter中的魔法函数

    Jupyter的魅力之处,除了体现在能提供丰富多彩的格式化文本显示,还体现在它提供了很多好用的函数.这些函数如同有魔力一般,故也被称为魔法函数(Magic Function).所谓魔法函数,实际上是I ...

  7. 半小时掌握 Jupyter Notebook常用用法

    头图 | CSDN 下载自视觉中国 作者 | caiyongji  责编 | 张文 来源 | caiyongji(ID:cai-yong-ji) 相较于 Pycharm 执行 py 文件来说,Jupy ...

  8. python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  9. python 魔法函数 运行时_16个python常用魔法函数

    ==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init ...

最新文章

  1. 江苏省三级偏软考试大纲
  2. mysql 优化器代码_Mysql查询优化器
  3. java8常用stream
  4. 【junit】junit4单元测试eclipse
  5. PMP之项目整合管理
  6. JQuery中的层级选择器
  7. 商业软件划分的网格导入OpenFOAM问题总结【终极】
  8. 正式踏入24岁了……
  9. react.lazy 路由懒加载_Vue面试题: 如何实现路由懒加载?
  10. java sdk他edk de区别_最低SDK版本/目标SDK版本与编译SDK版本之间有什么区别?
  11. java ajax_Ajax Java示例
  12. 2年CFA三级考试连过的我,全靠笔记多!(无金融背景)
  13. vnc远程软件,盘点六款你值得拥有的vnc远程软件
  14. ZZULIOJ 1196: 数星星(二)(结构体专题)
  15. 第八周--项目1--实现复数类中的运算符重载
  16. Unity中的Transform Gizmo中的Pivot和Center
  17. 【编程语言】Lua完全自学手册
  18. 高性能,高扩展,高可用架构
  19. css Hack
  20. Java内部类与异常类(上机实践二)

热门文章

  1. php 百度收录api_百度移动资源天级收录API提交-在线工具
  2. 论文word排版技巧
  3. JDK8 双冒号用法
  4. RIP、OSPF、BGP、动态路由选路协议、自治域AS
  5. 自动驾驶功能架构的演进
  6. 上市十天高管大换血 甘李药业有隐疾?
  7. 微信开发系列 — — 微信模板消息
  8. app后端开发四:GeoHash实现查找附近的X
  9. semantic_slam环境配置
  10. 计算机dns怎么设置方法,dns设置_dns怎么设置【步骤|图文教程】-太平洋IT百科