Confusión entre numpy, scipy, matplotlib y pylab

132

Numpy, scipy, matplotlib y pylab son términos comunes entre ellos que usan python para el cálculo científico.

Acabo de aprender un poco sobre pylab, y me confundí. Siempre que quiero importar numpy, siempre puedo hacer:

import numpy as np

Solo considero que una vez que lo haga

from pylab import *

el numpy también se importará (con npalias). Básicamente, el segundo hace más cosas en comparación con el primero.

Hay algunas cosas que quiero preguntar:

  1. ¿Es correcto que pylab sea solo un envoltorio para numpy, scipy y matplotlib?
  2. Como np es el alias numpy en pylab, ¿cuál es el alias scipy y matplotlib en pylab? (hasta donde yo sé, plt es un alias de matplotlib.pyplot, pero no sé el alias de matplotlib en sí)
goFrendiAsgard
fuente
44
En una nota de estilo general, evitaría el uso de pylab (e * importaciones) fuera del shell interactivo. Pylab es un apéndice un poco extraño para matplotlib de todos modos.
seberg
@unutbu: gracias por el enlace, eso deja las cosas claras. Creo que esto también significa que scipy es un tipo completamente diferente módulos, y por lo tanto sin relación a pylab
goFrendiAsgard
44
@goFrendiAsgard: Puede inspeccionar exactamente lo pylab importaciones mirando en /usr/lib/pymodules/python2.7/matplotlib/pylab.py(la ruta exacta es un poco diferente para Windows o OS X, pregunte si necesita ayuda para encontrarlo.)
unutbu
Gracias, eso es lo que busco. Creo que usaré la forma más "pitónica" ya que pylab es solo un envoltorio para los que están acostumbrados a matlab.
goFrendiAsgard

Respuestas:

129
  1. No, pylabes parte de matplotlib(in matplotlib.pylab) e intenta darle un entorno similar a MatLab. matplotlibtiene una serie de dependencias, entre las numpycuales importa bajo el alias común np. scipyno es una dependencia de matplotlib.

  2. Si ejecuta ipython --pylabuna importación automática, colocará todos los símbolos matplotlib.pylaben el ámbito global. Como escribiste, numpyse importa bajo el npalias. Los símbolos de matplotlibestán disponibles bajo el mplalias.

Benjamin Bannier
fuente
9
@Benjamin Bannier ¿Qué es esto entonces - wiki.scipy.org/PyLab ? Esto me confunde
shahensha
@shahensha, parece que hay dos PyLabs; según el enlace que envió: "... diferencia entre la visión de un nuevo PyLab expresada en esta página, y el paquete pylab existente que forma parte de matplotlib "
The Red Pea
15

Scipy y numpy son proyectos científicos cuyo objetivo es llevar la computación numérica eficiente y rápida a python.

Matplotlib es el nombre de la biblioteca de trazado de Python.

Pyplot es una API interactiva para matplotlib, principalmente para usar en portátiles como jupyter. Por lo general, utilizar de esta manera: import matplotlib.pyplot as plt.

Pylab es lo mismo que pyplot, pero con características adicionales (actualmente se desaconseja su uso).

  • pylab = pyplot + numpy

Vea más información aquí: Matplotlib, Pylab, Pyplot, etc.: ¿Cuál es la diferencia entre estos y cuándo usar cada uno?

Felipe
fuente
2
Otro ejemplo publicado directamente en el sitio de matplotlib "Matplotlib, pyplot y pylab: ¿cómo están relacionados? MatplotlibEs el paquete completo ; matplotlib.pyplotes un módulo en matplotlib ; y pylabes un módulo que se instala junto a matplotlib " .
The Red Pea
3

Dado que algunas personas (como yo) todavía pueden estar confundidas sobre el uso de pylab ya que los ejemplos que usan pylabestán disponibles en Internet, aquí hay una cita de las preguntas frecuentes oficiales de matplotlib:

pylab es un módulo de conveniencia que importa en masa matplotlib.pyplot (para trazar) y numpy (para matemáticas y trabajar con matrices) en un solo espacio de nombres. Aunque muchos ejemplos usan pylab, ya no se recomienda.

Entonces, TL; DR; es no usar pylab, punto. Use pyplote importe por numpyseparado según sea necesario.

Aquí está el enlace para leer más y otros ejemplos útiles.

jamescampbell
fuente
1
Pylab recientemente abierto, rápidamente retrocedió aterrorizado por lo que vi. ¿Cómo se aceptó esto como normal?
Eric
Si quien sabe.
jamescampbell