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


132

Numpy,scipy,matplotlib和pylab是使用python进行科学计算的常用术语。

我只是学习了一些有关pylab的知识,而感到困惑。每当我要导入numpy时,我都可以执行以下操作:

import numpy as np

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

from pylab import *

numpy也将被导入(使用np别名)。所以基本上,第二个相比第一个做更多的事情。

我想问的几件事:

  1. pylab仅仅是numpy,scipy和matplotlib的包装吗?
  2. 由于NP是pylab中的numpy别名,因此pylab中的scipy和matplotlib别名是什么?(据我所知,plt是matplotlib.pyplot的别名,但我不知道matplotlib本身的别名)

4
一般而言,我会避免在交互式外壳程序之外使用pylab(和*导入)。无论如何,Pylab都是matplotlib的一个奇怪的附录。
seberg 2012年

@unutbu:谢谢您的链接,这很清楚。我认为这也意味着scipy是一个完全不同的模块,因此与pylab无关
goFrendiAsgard 2012年

4
@goFrendiAsgard:您可以通过查找来/usr/lib/pymodules/python2.7/matplotlib/pylab.py确切地检查pylab导入的内容(Windows或OSX的确切路径有些不同;询问是否需要帮助找到它。)
unutbu 2012年

谢谢,这就是我想要的。我认为我将使用更“ pythonic”的方式,因为pylab只是对使用matlab的用户的包装。
goFrendiAsgard

Answers:


129
  1. 没有,pylab是的一部分matplotlib(在matplotlib.pylab),并试图给你喜欢的环境Matlab的。matplotlib有许多依赖项,其中有一些依赖项numpy以通用别名导入npscipy不是的依赖项matplotlib

  2. 如果运行ipython --pylab自动导入,则会将所有符号从中matplotlib.pylab放入全局范围。就像您写的一样numpy,在np别名下导入。别名matplotlib下的符号来自mpl


9
@Benjamin Bannier那么,这是什么-wiki.scipy.org/PyLab?这使我感到困惑。
shahensha

@shahensha,听起来好像有两个 PyLabs;根据您发送的链接:“ ... 此页上表示的新PyLab的愿景与作为matplotlib的一部分现有pylab软件包之间的区别”
The Red Pea

15

Scipy和numpy是科学项目,旨在为python带来高效,快速的数值计算。

Matplotlib是python绘图库的名称。

Pyplot是matplotlib的交互式api,主要用于jupyter之类的笔记本中。您通常会这样使用它:import matplotlib.pyplot as plt

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

  • pylab = pyplot + numpy的

在此处查看更多信息:Matplotlib,Pylab,Pyplot等:这些和何时使用它们有什么区别?


2
另一个直接发布在matplotlib网站上的示例 “ Matplotlib,pyplot和pylab:它们之间有什么关系?Matplotlib整个软件包matplotlib.pyplotmatplotlib中的模块;pylab还是与matplotlib一起安装的模块
Red Pea,

3

由于某些示例(例如我)可能仍然对pylab的使用感到困惑,因为pylab互联网上存在使用示例的示例,因此这里引用了官方matplotlib常见问题解答:

pylab是一个便捷模块,可在单个名称空间中批量导入matplotlib.pyplot(用于绘图)和numpy(用于数学以及使用数组)。尽管许多示例都使用pylab,但不再建议使用。

因此,TL; DR; 是不使用pylab,句点。根据需要分别使用pyplot和导入numpy

这是进一步阅读和其他有用示例的链接


1
最近打开的pylab,很快使我对所看到的东西感到恐惧。这怎么被正常接受?
eric

是的,谁知道。
jamescampbell,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.