numpy、scipy、matplotlib和pylab之间的混淆

148

Numpy、scipy、matplotlib 和 pylab 是使用Python进行科学计算的人们常见的术语。

我刚刚了解了一点pylab,但有些困惑。每当我想导入numpy时,我总是可以这样做:

import numpy as np

我只是认为,一旦我这样做了

from pylab import *

第二个代码导入了numpy(别名为np),意味着与第一个相比,第二个代码实现了更多的功能。

我有几个问题:

  1. 是否正确地认为pylab只是numpy、scipy和matplotlib的包装器?
  2. 在pylab中,np是numpy的别名,那么scipy和matplotlib在pylab中的别名是什么?(据我所知,plt是matplotlib.pyplot的别名,但我不知道matplotlib本身的别名)

4
通常来说,我建议不要在交互式shell之外使用pylab(以及通配符导入)。无论如何,Pylab对于matplotlib来说有点像一个奇怪的附录。 - seberg
@unutbu:感谢链接,这使事情清晰了。我认为这也意味着scipy是完全不同的模块,因此与pylab无关。 - goFrendiAsgard
4
你可以查看/usr/lib/pymodules/python2.7/matplotlib/pylab.py文件,以精确了解pylab导入了哪些内容(在Windows或OSX中路径略有不同,如果需要帮助,请询问)。 - unutbu
谢谢,这就是我在寻找的。我想我会使用更“Pythonic”的方式,因为pylab只是为那些习惯于Matlab的人提供的包装器。 - goFrendiAsgard
1
所提到的常见问题解答已有新链接。 (http://matplotlib.org/faq/usage_faq.html#matplotlib-pyplot-and-pylab-how-are-they-related) - Robert Pollak
与https://dev59.com/TGQn5IYBdhLWcg3wamnO密切相关。 - tacaswell
3个回答

136
  1. pylab不是matplotlib的依赖项,而是matplotlib.pylab的一部分,它试图为您提供类似MatLab的环境。matplotlib有许多依赖项,其中包括numpy,它以常用别名np导入。 scipy不是matplotlib的依赖项。

  2. 如果您运行ipython --pylab,自动导入将把matplotlib.pylab中的所有符号放入全局作用域中。像您写的那样,numpy会以别名np导入。matplotlib中的符号可在mpl别名下使用。


9
这是什么 - http://wiki.scipy.org/PyLab?这让我感到困惑。 这是一个关于使用Python进行科学计算和数据可视化的工具包的网页。它提供了一些在Python中进行科学计算和绘图的基本库和工具。 - shahensha
@shahensha,听起来好像有两个PyLab;根据您发送的链接:“...这个页面上表达的一个新PyLab的愿景作为matplotlib一部分的现有pylab包之间的差异”。 - Nate Anderson
重要消息来自 matplotlib.org: "pylab是一个方便模块,它在单个命名空间中批量导入matplotlib.pyplot(用于绘图)和numpy(用于数学和处理数组)。 pylab已经过时,强烈不建议使用,因为会污染命名空间。请改用 pyplot。" - Gabriel Staples

18

Scipy和numpy是科学项目,旨在将高效快速的数值计算引入Python。

Matplotlib是Python绘图库的名称。

Pyplot是matplotlib的交互式API,主要用于像Jupyter这样的笔记本中。通常可以像这样使用它:import matplotlib.pyplot as plt

Pylab与pyplot相同,但具有额外的功能(目前不建议使用)。

  • pylab = pyplot + numpy

请参见更多信息:Matplotlib、Pylab、Pyplot等:它们之间的区别以及何时使用?


2
“Matplotlib,pyplot和pylab:它们之间有什么关系?” Matplotlib是整个软件包;matplotlib.pyplotmatplotlib中的一个模块;而pylab是与matplotlib一起安装的一个模块。” - Nate Anderson
已点赞。这里有一段更正式的引用关于pylab被弃用:"pylab是一个方便模块,它以单一命名空间批量导入matplotlib.pyplot(用于绘图)和numpy(用于数学和数组操作)。由于命名空间污染,强烈不建议使用pylab。请使用pyplot代替。" - Gabriel Staples

4

由于一些人(比如我)可能仍然对使用pylab感到困惑,因为互联网上有使用pylab的示例,以下是来自官方matplotlib FAQ的一句话:

pylab是一个便利模块,可以将matplotlib.pyplot(用于绘图)和numpy(用于数学运算和处理数组)批量导入到一个命名空间中。尽管许多示例使用pylab,但现在不再建议使用。

因此,简而言之,不要使用pylab,使用pyplot并根据需要单独导入numpy

点击此处获取更多阅读资料和其他有用示例。


2
最近打开了pylab,看到了令人惊恐的画面,这怎么可能被接受为正常呢? - eric
是的,谁知道呢。 - james-see

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接