Путаница между 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 - это псевдоним numpy в pylab, что такое псевдоним scipy и matplotlib в pylab? (насколько мне известно, plt - это псевдоним matplotlib.pyplot, но я не знаю псевдонима для самой matplotlib)
goFrendiAsgard
источник
4
Что касается общего стиля, я бы избегал использования pylab (и * import) вне интерактивной оболочки. В любом случае Pylab - это немного странное приложение к matplotlib.
Seberg
@unutbu: спасибо за ссылку, которая проясняет ситуацию. Я думаю, это также означает, что scipy - это совершенно разные модули и, следовательно, не имеют отношения к pylab
goFrendiAsgard
4
@goFrendiAsgard: вы можете точно проверить, что импортирует pylab, посмотрев /usr/lib/pymodules/python2.7/matplotlib/pylab.py(точный путь немного отличается для Windows или OSX; спросите, нужна ли вам помощь в его поиске.)
unutbu
Спасибо, вот что я ищу. Я думаю, что буду использовать более «питонический» способ, поскольку pylab - это просто оболочка для тех, кто использует Matlab.
goFrendiAsgard

Ответы:

129
  1. Нет, pylabявляется частью matplotlib(in matplotlib.pylab) и пытается предоставить вам среду, подобную MatLab. matplotlibимеет ряд зависимостей, среди numpyкоторых он импортирует под общим псевдонимом np. scipyне является зависимостью от matplotlib.

  2. Если вы запустите ipython --pylabавтоматический импорт, все символы будут помещены matplotlib.pylabв глобальную область видимости. Как вы написали, numpyимпортируется под npпсевдонимом. Символы из matplotlibдоступны под mplпсевдонимом.

Бенджамин Банье
источник
9
@Benjamin Bannier Что это тогда - wiki.scipy.org/PyLab ? Это смущает меня.
Shahensha
@shahensha, похоже, есть две PyLabs; по отправленной вами ссылке: «... разница между видением нового PyLab, выраженным на этой странице, и существующим пакетом pylab, который является частью matplotlib »
The Red Pea
15

Scipy и numpy - это научные проекты, целью которых является внедрение эффективных и быстрых числовых вычислений в Python.

Matplotlib - это имя библиотеки построения графиков Python.

Pyplot - это интерактивный api для matplotlib, в основном для использования в записных книжках, таких как jupyter. Вы вообще использовать его как это: import matplotlib.pyplot as plt.

Pylab - это то же самое, что и pyplot, но с дополнительными функциями (его использование в настоящее время не рекомендуется).

  • pylab = pyplot + numpy

См. Дополнительную информацию здесь: Matplotlib, Pylab, Pyplot и т. Д.: В чем разница между ними и когда их использовать?

Фелипе
источник
2
Другой пример размещен непосредственно на сайте matplotlib «Matplotlib, pyplot и pylab: как они связаны? MatplotlibЭто весь пакет ; matplotlib.pyplotэто модуль в matplotlib ; и pylabэто модуль, который устанавливается вместе с matplotlib. »
Red Pea,
3

Поскольку некоторые люди (например, я) все еще могут быть озадачены использованием pylab, поскольку pylabв Интернете есть примеры его использования , вот цитата из официального FAQ по matplotlib:

pylab - это удобный модуль, который массово импортирует matplotlib.pyplot (для построения графиков) и numpy (для математики и работы с массивами) в едином пространстве имен. Хотя во многих примерах используется pylab, он больше не рекомендуется.

Итак, TL; DR; не использовать pylab, точка. При необходимости используйте pyplotи импортируйте numpyотдельно.

Вот ссылка для дальнейшего чтения и другие полезные примеры.

jamescampbell
источник
1
Недавно открыла пылаб, быстро вскочила в ужасе от увиденного. Как это вообще было принято как нормальное?
Эрик
Да кто знает.
Джеймскэмпбелл,