【问题标题】:What is %pylab?什么是 %pylab?
【发布时间】:2014-01-06 23:33:18
【问题描述】:

我不断看到人们在各种代码片段中使用%pylab,尤其是在 iPython 中。但是,我看不到《学习 Python》(以及我拥有的几本其他 Python 书籍)中的任何地方提到了 %pylab,并且我不确定它的含义。

我相信答案很简单,但是谁能启发我?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    %pylabipython 中的一个魔法函数

    ipython 中的魔法函数总是以百分号 (%) 开头,后面没有任何空格,后面是一个小文本字符串;从本质上讲,ipython 魔术函数定义了对交互工作特别有用的快捷方式,例如,让您了解魔术函数在 python 中的工作原理,这是我最喜欢的一些:

    • 查看cwd目录内容:

      %ls   
      
    • 要使用空命名空间在 ipython 中运行脚本,请键入空格,然后输入脚本名称:

      %run     
      
    • 执行代码 sn-p(特别是对于多行 sn-ps,这通常会导致抛出 _IndentationError_):

      %paste
      

    当在 IPython 提示符处输入 %pylab 魔术函数时,它会触发 Matplotlib 中各种模块的导入。

    哪些模块?好吧,那些包含在 pylab 接口下的那些。

    很棒的 Matplotlib 绘图库有 两个 不同的接口:一个是 Python 接口,一个是原始的类 MATLAB 接口,用于在交互式提示下绘图。

    前者通常是这样导入的:

    from matplotlib import pyplot as PLT
    

    确实,pyplot有自己的神奇python魔术函数

    %pyplot
    

    为什么有两个不同的接口? Matplotlib 的原始接口是 pylab;只要 后来是添加了pythonic接口。脚本和应用程序开发不是 项目开始时 Matplotlib 的主要用例,在 python shell 是。

    Apparently John Hunter(Matplotlib 的创建者)想要在 python 中包含交互式绘图,因此他向 Fernando Perez (FP) 的 IPython 项目提交了一个补丁。 FP当时是一名博士生,并告知JH他将有一段时间无法复习该路径。因此,JH 创建了 Matplotlib。意义在于,Matplotlib 最初是一个基于 shell 的绘图方案。

    pylab界面确实更适合交互工作:

    from pylab import *
    
    x, y = arange(10), cos(x/2)
    plot(x, y)
    show()
    

    并使用 pyplot 接口:

    from matplotlib import pyplot as PLT
    import numpy as NP
    
    x, y = NP.arange(10), NP.cos(x/2)
    fig = PLT.figure()
    ax1 = fig.add_subplot(111)
    ax1.plot(x, y)
    PLT.show()
    

    【讨论】:

    【解决方案2】:

    %pylab 是输入以下所有命令的快捷方式 - 本质上是将 numpy 和 matplotlib 添加到会话中。这被整合到 iPython 作为过渡工具,目前的建议是您不应该使用它。核心原因是以下命令集过多地导入到全局命名空间中,并且它们不允许您将 matplotlib 的模式从 UI 更改为 QT 或其他东西。您可以在http://nbviewer.ipython.org/github/Carreau/posts/blob/master/10-No-PyLab-Thanks.ipynb?create=1 上查看其历史和背后的原因。

    这就是%pylab 所做的:

    import numpy
    import matplotlib
    from matplotlib import pylab, mlab, pyplot
    np = numpy
    plt = pyplot
    
    from IPython.core.pylabtools import figsize, getfigs
    
    from pylab import *
    from numpy import *
    

    这是我在笔记本开头使用的:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    

    【讨论】:

    • 很好的答案!但是inline 是做什么的呢?
    • inline 让您可以内联而不是在新窗口或外壳中绘制图形,以查看没有内联的效果检查
    • 谢谢你的解释,超级有用。
    【解决方案3】:

    更多关于 IPython 魔法的最新文档here

    Magics 函数通常以类似 shell 的语法形式出现, 但在引擎盖下是python函数。语法和赋值 可能性类似于使用 bang (!) 语法的可能性,但使用 更大的灵活性和力量。魔术函数以百分号开头 (%) 或双百分比 (%%)。

    一点点here,更具体地说是关于%pylab 魔术here

     %pylab [--no-import-all] [gui]
    

    加载 numpy 和 matplotlib 以交互工作。

    这个函数可以让你激活 pylab (matplotlib, numpy 和 交互式支持)在 IPython 会话期间的任何时候。

    %pylab 进行以下导入:

    import numpy
    import matplotlib
    from matplotlib import pylab, mlab, pyplot
    np = numpy
    plt = pyplot
    
    from IPython.display import display
    from IPython.core.pylabtools import figsize, getfigs
    
    from pylab import *
    from numpy import *
    

    【讨论】:

      【解决方案4】:

      %pylab 是一个“魔法函数”,您可以在 IPython 或 Interactive Python 中调用它。通过调用它,IPython 解释器将导入 matplotlibNumPy 模块,以便您可以方便地访问它们的功能。例如,

      rich@rich-ubuntu:~/working/fb_recruit/working$ ipython
      Python 2.7.6 |Anaconda 1.8.0 (64-bit)| (default, Nov 11 2013, 10:47:18) 
      Type "copyright", "credits" or "license" for more information.
      
      IPython 1.1.0 -- An enhanced Interactive Python.
      ?         -> Introduction and overview of IPython's features.
      %quickref -> Quick reference.
      help      -> Python's own help system.
      object?   -> Details about 'object', use 'object??' for extra details.
      
      In [1]: arange(4)
      ---------------------------------------------------------------------------
      NameError                                 Traceback (most recent call last)
      <ipython-input-1-2e43d7eb1b3e> in <module>()
      ----> 1 arange(4)
      
      NameError: name 'arange' is not defined
      
      In [2]: %pylab
      Using matplotlib backend: Qt4Agg
      Populating the interactive namespace from numpy and matplotlib
      
      In [3]: arange(4)
      Out[3]: array([0, 1, 2, 3])
      
      In [4]: 
      

      【讨论】:

      • 所以,如果 OP 想了解更多相关信息,他们会搜索“pylab magic function ipython”
      【解决方案5】:

      顾名思义,Pylab 是一个类似于 MATLAB 的前端,用于在 Python 中进行数学运算。 iPython 对 Pylab 有特定的支持,它是使用 %pylab 魔法命令调用的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-11
        • 1970-01-01
        • 2012-07-13
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2012-12-03
        • 1970-01-01
        相关资源
        最近更新 更多