什么是% pylab?

我一直看到人们在各种代码片段中使用 %pylab,特别是在使用 iPython 时。然而,我看不出 %pylab在学习 Python 的任何地方(以及我拥有的为数不多的其他 Python 书籍)被提到过,也不确定它意味着什么。

我知道答案很简单,但有人能给我点启发吗?

73357 次浏览

顾名思义,Pylab 是一个类似 MATLAB 的前端,用于在 Python 中进行数学计算。IPython 对 Pylab 有特定的支持,可以使用 %pylab magic 命令调用 Pylab。

%pylab是一个“神奇的函数”,您可以在 IPython 或 交互式 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]:

%pylab 巨蟒中的 神奇功能

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

  • 查看 cwd 目录内容:

    %ls
    
  • to run a script in ipython using an empty namespace, type space then a script name:

    %run
    
  • to execute a code snippet (particularly for multi-line snippets which would usually cause an _IndentationError_ to be thrown):

    %paste
    

When the %pylab magic function is entered at the IPython prompt, it triggers the import of various modules within Matplotlib.

Which modules? well, the ones subsumed under the pylab interface.

The awesome Matplotlib plotting library has two distinct interfaces: a pythonic one, and the original MATLAB-like one intended for plotting at the interactive prompt.

The former is usually imported like so:

from matplotlib import pyplot as PLT

的确,pyplot 有自己神奇的蟒蛇神奇功能

%pyplot

为什么是两个不同的接口? Matplotlib 最初的接口是 pylab; 只是 后来增加了 Python 界面,脚本和应用程序开发则没有 项目开始时 Matplotlib 的主要用例,在 蟒蛇的外壳。

显然 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()

%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

关于 IPython 魔法 给你的最新文档。

魔法函数通常以类似于 shell 的语法的形式出现, 但是在 hood python 函数下 可能性类似于 bang (!)语法,但是 更灵活,更有力。魔法函数从百分号开始 (%)或加倍(%)。

一点点 给你和更具体的关于 %pylab魔术 给你

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

以交互方式加载 numpy 和 matplotlib。

这个函数允许您激活 pylab (matplotlib、 numpy 和 交互式支持)。

%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 *