Introducción a Python para científicos e ingenieros

El lenguaje Python

Python es un lenguaje de programación de propósito general muy fácil de aprender, con una sintaxis característica que hace que los programas escritos en él sean muy legibles, ampliamente utilizado por empresas como Google o la NASA y, además, libre. Fue creado en 1991 por Guido van Rossum, un programador holandés.

Un programa escrito en Python tiene esta pinta:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Suma dos números (suma.py)
from __future__ import print_function
def suma(a, b):
  c = a + b
  return c
x = 1
y = 2.3
print('La suma de x e y es: {}'.format(suma(x, y)))

Este programa imprimiría por pantalla

$ pyton suma.py
La suma de x e y es: 3.3

y funciona tanto con Python 2.7 como con Python 3.2. Ya hablaremos de qué es lo que hace exactamente y de esto de las versiones más adelante.

Técnicamente, el lenguaje Python tiene las siguientes características:

  • Es interpretado, en lugar de compilado.En lenguajes compilados como Fortran o C, después de escribir el programa en el fichero fuente este se compila, dando lugar a un archivo binario que llamamos ejecutable. Aquí un intérprete lee las instrucciones contenidas en el fichero fuente secuencialmente cada vez que queremos ejecutar el programa. Esto tendrá sus ventajas y sus inconvenientes, como tendremos ocasión de ver.
  • Es dinámico, en lugar de estático.No es necesario declarar explícitamente el tipo de las variables: es el intérprete quien hace automáticamente la asignación, otra vez al contrario de lo que ocurre en lenguajes como Fortran o C.
  • Tiene tipado fuerte, en lugar de débil.Una vez una variable tiene un tipo asignado, no se producirán conversiones implícitas, sino que se producirá un error, al contrario de lo que pasa en JavaScript o en PHP.
  • Soporta diversos paradigmas de programación.El paradigma más usual en Fortran es la programación por procedimientos, y existen también la programación orientada a objetos (POO), programación funcional, etc.

Por último, para hacernos una idea rápida de cuál es la filosofía detrás de Python, no hay más que escribir en el intérprete import this y obtendremos el Zen de Python, escrito por Tim Peters:

  • Bonito es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Plano es mejor que anidado.
  • Disperso es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no lo son tanto como para romper las reglas.
  • Aunque lo práctico gana a la pureza.
  • Los errores nunca deberían dejarse pasar silenciosamente.
  • A menos que hayan sido silenciados explícitamente.
  • Frente a la ambigüedad, rechaza la tentación de adivinar.
  • Debería haber una –y preferiblemente sólo una– manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.
  • Ahora es mejor que nunca.
  • Aunque nunca es a menudo mejor que ya mismo.
  • Si la implementación es difícil de explicar, es una mala idea.
  • Si la implementación es fácil de explicar, puede que sea una buena idea.
  • Los espacios de nombres (namespaces) son una gran idea ¡hagamos más de esos!

¿Interesante, no crees? ¡Sigamos!

Utilidad de Python en ciencia e ingeniería

El lenguaje Python ha recibido desde sus orígenes mucha atención de la comunidad científica. El propio van Rossum es matemático, y ya en 1995 apareció un paquete llamado Numeric que permitía manipular arrays multidimensionales, lo que permitió programar algoritmos matemáticos en Python que se ejecutaban mucho más rápido. Este paquete fue el origen de Numpy, quien será el protagonista de este blog.

(Sí, diré “array” en lugar de “vector”, con el permiso de los académicos de la RAE)

Python tiene numerosas alicientes para el mundo científico e ingenieril:

  • Los paquetes Numpy y Scipy pueden convertirlo, con poco trabajo, en un sustituto completo a programas prohibitivamente caros pero de uso común en este ámbito como Matlab.
  • El proyecto Sage constituye un esfuerzo titánico para reunir todo el software libre relacionado con las matemáticas para crear una alternativa viable a programas como Maple o Mathematica. Y van por muy buen camino.
  • Python es mucho más consistente, sólido e intuitivo de lo que el lenguaje Matlab podrá nunca llegar a ser.
  • Python es un lenguaje de propósito general, por lo que puedes mezclar tu “number crunching” con multitud de funcionalidades que nunca encontrarás en lenguajes de dominio específico, como puedan ser Maple o Mathematica.
  • La documentación de Python es enorme y está muy bien escrita, y hay cantidad de recursos sobre él en Internet disponibles sin coste alguno. Es muy sencillo de aprender por cuenta propia.
  • Python se puede integrar muy fácilmente con código escrito en Fortran gracias a F2PY, con lo que podemos conseguir la velocidad inigualable de este con la sencillez de aquel.
  • Ya hay escritas para Python multitud de bibliotecas relacionadas con la física o la ingeniería.
  • ¿He dicho ya que es libre y se puede instalar en Linux, Windows y Mac?

Y hablando de instalar, ya que se te ha hecho la boca agua… ¿cómo lo instalo?

Instalación

Ya que vamos a hablar de instalar Python, hagamos primero un pequeño comentario sobre versiones. Actualmente hay dos versiones de Python en activo:

  • La versión 2.7 es la última revisión de la rama 2.x, y es la que ha estado en activo durante los últimos años.
  • La versión 3.2 es la revisión actual (a 31 de diciembre de 2011) de la rama 3.x, y es donde se están añadiendo nuevas características.

Python 3 fue introducido para solucionar algunas inconsistencias que tenía la versión anterior y que requerían romper la compatibilidad. Esto significa que no todo el código que se ejecute en Python 3 funcionará en Python 2.

No todos los paquetes que usaremos aquí “se han pasado” todavía a la nueva versión, aunque esperemos que lo hagan pronto. Sin embargo, es altamente recomendable que los programadores se vayan habituando a las bondades de Python 3.

En este blog intentaré escribir código que pueda ejecutarse en las dos versiones de Python indistintamente, como el programa que hemos visto más arriba, siempre que estén disponibles los paquetes necesarios. Por tanto, te recomiendo que instales la versión 2.7.

Bien, y dicho esto, vamos con la instalación.

Si estás en Windows:

  1. Vamos a la web de Python, y accedemos a la sección “Download”, o directamente a descargar Python. En la parte de arriba hay un comentario sobre diversas implementaciones de Python. Ya hablaremos de eso otro día, nosotros vamos a instalar la implementación principal, CPython, escrita en lenguaje C.
  2. En la sección “Download Python”, escoge Python Windows Installer o Mac OS X Installer, dependiendo de tu sistema operativo.
  3. Sigue las instrucciones del instalador, ¡y listo!

En nuestro blog puedes leer instrucciones más detalladas para instalar Python en Windows.

Si estás en Mac, la opción más recomendada es usar Macports:

sudo ports install py26-matplotlib

Si estás en Linux, posiblemente Python ya venga instalado con tu sistema operativo. Para comprobarlo, abre una ventana de terminal y escribe:

which python

y también:

which python2

Si alguno de estos comandos escupe algo como /usr/bin/python o /usr/bin/python2 entonces ya puedes utilizar Python. En caso contrario, deberás instalar de la manera habitual el paquete python o python2, bien utilizando tu gestor de paquetes o bien compilando desde el código fuente. Si existe python2 en tu distribución, posiblemente python2 es la versión 2.7 y python la 3.2.

¡Hola, Python!

En entradas posteriores veremos más en profundidad cómo escribir programas en Python, pero de momento os tendré que dejar con la miel en los labios 😛 Para abrir un poco el apetito ya que lo tenemos instalado y para estrenar el intérprete, ábrelo y escribe:

>>> 2 + 2
4
>>> 2 + 2 == 5
False
>>> a = 1
>>> a + 6
7
>>> print 'Hola, Python!'
Hola, Python!
>>> for i in range(1, 13): print i
...
1
2
3
4
5
6
7
8
9
10
11
12
>>> print 'Feliz 2012!'
Feliz 2012!

Puedes hacer todos los experimentos que quieras, que lo peor que te podrá pasar es que te aparezca un mensaje de error. ¡No vas a destruir tu ordenador!

Si quieres cacharrear un poco más, ¡puedes ir al tutorial oficial de Python ahora mismo!

Para saber más

Para finalizar, aquí os pongo más enlaces interesantes:

  • Página para promocionar Python 3, con recursos, tutoriales e información útil. Muy recomendable. (Inglés)
  • ¿Debo usar Python 2 o Python 3? Si te surgen las dudas, aquí encontrarás algunas respuestas. (Inglés)
  • En este curso de Iniciación a Python del Instituto de Astrofísica de Andalucía encontrarás las diapositivas de las charlas y más información útil.
  • Y, por supuesto, siempre nos quedará Google.

¡Y hasta aquí la entrada de hoy! Espero que os haya resultado útil. ¡Nos vemos!

Juan Luis Cano

Estudiante de ingeniería aeronáutica y con pasión por la programación y el software libre. Obsesionado con mejorar los pequeños detalles y con ganas de cambiar el mundo. Divulgando Python en español a través de Pybonacci y la asociación Python España.

More Posts - Website

Follow Me:
TwitterLinkedIn

31 thoughts on “Introducción a Python para científicos e ingenieros

  1. El sitio promete.
    Me quedaré chismorreando por aquí, a ver si por fin aprendo Python…
    Una sugerencia: Yo de vosotros no limitaría el uso de las etiquetas de wordpress a las herramientas que se emplean; A la larga, será más fácil navegar si se utilizan etiquetas descriptivas de qué parte de las matemáticas o qué sectores de la ciencia se abordan desde Python…

    1. Bueno, no me acabo de aclarar con esta ambivalencia de categorías / etiquetas de WordPress, pero me parece un poco desperdicio limitar tanto los valores.
      Quizás en categorías quepan los niveles (Básico…) y las herramientas (Python, Numpy…) y en las etiquetas todo lo demás (gráficos, matrices, estadística…)
      Saludos.

      1. No me agrada la idea de mezclar esos dos conceptos en categorías. De todas formas la importancia de esto es relativa: al final, como se llega aquí es a través de motores de búsqueda, y eso también vale para navegar por el sito. No creo que haga falta ser exhaustivo en esto.

  2. ¿Recomendáis algún entorno de programación para Python? Por ejemplo, los cursos que dan Matlab como lenguaje de iniciación en ciencias e ingeniería se apoyan en el entorno de Matlab, que está muy bien para programadores primerizos (el editor tiene muchas ayudas, análisis estático de errores, etc). ¿Conocéis algo parecido para Python?

    1. Muy buena pregunta 😛 Es muy recurrente! Y el punto de MATLAB es muy importante también. Yo personalmente uso IPython, que no deja de ser un intérprete de Python con un montón de mejoras pero estas hacen que sea muy cómodo trabajar con él. Estoy al tanto de que existen otros entornos: hay gente que usa Pydev (http://pydev.org/, Eclipse), otros usan Python(x, y) (http://code.google.com/p/pythonxy/) que es también una distribución científica de Python como puede ser Enthought (http://www.enthought.com/products/epd.php), etc.

      El otro día por Twitter nos dijeron que podíamos escribir algo sobre IPython. Viendo el tirón que tiene esto seguramente le vendría muy bien al blog una entrada con la palabra «IDE» en el título 😛

      ¡Un saludo!

      P.D.: Si te interesa el tema, ¿nos puedes hacer RT con lo de la pregunta en FB y cambiar tu respuesta? 😛

      1. El tema me interesa bastante 🙂 porque doy clases de introducción a la programación y métodos numéricos usando MATLAB, y me gustaría encontrar una alternativa sólida. MATLAB como entorno de programación está genial, pero es difícil que los alumnos consigan tener el mismo entorno en su ordenador, y por tanto dificulta que puedan practicar por su cuenta.

        Octave, Python y otras alternativas libres están también genial, pero son más espartanas y tienen entornos de programación pobres (si tienen). Si el entorno es difícil de manejar para usuarios noveles, la ventaja de poder tener el mismo entorno que las clases en el ordenador personal ya no está tan clara.

        iPython es un buen comienzo (por cierto, ¿conocéis http://bpython-interpreter.org/ ?) pero está todavía lejos del entorno que tiene MATLAB. He estado mirando Python(x,y) y Spyder, y parecen tener mejor pinta.

        Personalmente yo uso Emacs con MATLAB, Octave y Python, y vim tiene muy buena pinta según el twit que habéis resaltado, pero no me parece una alternativa para las clases. Creo que se perdería demasiado tiempo explicando el editor.

        Os acabo de hacer un retweet con la pregunta. Sobre cambiar la respuesta, ¿se puede hacer eso? :). De todas formas, creo que con este comentario también queda clara la pregunta.

        Estaría bien tener una entrada en este blog explicando qué entornos de programación hay disponibles, con sus ventajas e inconvenientes.

    2. Yo uso spyder 2 en el curro porque me suelo instalar pythonxy en entornos windows.
      En casa tiro de vim tuneado, gedit tuneado o de spyder 2 en ubuntu.

      Spyder 2 es un IDE pensado un poco más enfocado para ciencia pero no le veo muchas diferencias con otros.

      ipython también lo uso pero para cosas muy ligeras, comprobar cálculos tontos y rápidos y cosas así, no porque no sea muy potente, si no por la costumbre.

      En breve quiero hablar un poco de spyder 2 y del nuevo ipython (pero me los tengo que preparar para hablar con propiedad y coordinarme con el resto de bloggers de este humilde blog).

      Saludos.

    3. Un artículo entero dedicado a IDE’s es redundante, hay mucha información en la red y al final todo se reduce a que pruebes uno y te sientas cómodo con él porque la mayoría tiene las mismas características básicas. Para conocer más IDE’s puedes visitar:
      http://python.org.ar/pyar/IDEs
      http://python.org.ar/pyar/TablaIDEs
      http://wiki.python.org/moin/IntegratedDevelopmentEnvironments
      http://python.majibu.org/preguntas/1/cual-es-el-mejor-ide-para-programar-en-python

      Algunos son más complejos, otros son más sencillos. Mira unos pocos y si alguno satisface tus nacesidades mínimas usa ese, después de conocerlo te sentirás cómodo con él. Al final, muchos son parecidos y a la mayoría yo no les podría sacar ni el 20% de lo que ofrecen.

      Una posibilidad para mirar como IDE sería Eclipse+pydev (muy completo y pesado), ninja-ide (con desarrollo muy activo) y Spider2 (que viene con consolas integradas de python y ipython y la interfaz es tremendamente configurable). Con esto no pretendo convencer a nadie sobre Spyder2, viene con la distribución pythonxy, con instalable para windows (requerimiento del trabajo) y con la mayoría de librerías que necesito y me resuelve esa papeleta. En un par de clicks estoy listo para trabajar. Un Ubuntu (y otras distros) no es nada complicado tener un entorno parecido a pythonxy.

      1. HOLA, disculpa, estoy usando spider, pero no tiene autocomplete con los modulos externos, por ejemplo:
        si escribo “gtk.” no sale las propiedades, ni metodos de gtk, ¿es que tiene esa deficiencia, o me falta configurar algo? bueno espero tu respuesta, por lo demas este editor es excelente en verdad.

  3. Que bueno encontrar este blog, estaba buscando algo parecido en español y te encontré por tu publicación en twitter de Ninja Ide.

    Aquí esta mi granito de arena: para los que apenas empiezan en la programación y saben inglés les recomiendo los cursos de Udacity en http://www.udacity.com/. El curso introductorio a ciencias de la computación (CS101) y el de diseño de programas de computadora (CS212) dictado por Peter Norvig (Director de investigaciones de Google) creo que son buenas bases para empezar con python.

    Si no sabes inglés los cursos están en proceso de traducción por la comunidad, pero eso tomara un poco más de tiempo.

    1. Muchas gracias Jdash! Espero que encuentres los artículos interesantes.

      Gracias por el enlace a los cursos, no los conocía! Lo cierto es que en inglés ya hay un montón de información sobre todos estos temas: lo que falta es material en castellano. Aquí vamos poniendo nuestro granito de arena 😉

  4. Hola muy interesante tu blog! Soy un aficionado a Python y quiero aprender a utilizar un software estadístico. Mi duda es con respecto a R: ¿cuáles son las ventajas/desventajas de utilizar Python sobre R? ¿uno reemplaza al otro? ojalá puedas aclarar mi inquietud. Muchas gracias!

  5. Hola, antolieztsu.

    No hay ventajas o desventajas. Hay problemas y soluciones. Dependiendo del problema que quieras resolver quizá uno sea mejor que otro o viceversa.

    R es un lenguaje de programación enfocado al cálculo estadístico. Python es un lenguaje de propósito general con capacidades para hacer cálculo estadístico.

    Si tu problema es hacer cálculos estadísticos avanzados cuya funcionalidad solo existe en R o que R te permite obtenerlo de forma muy sencilla, mi recomendación es que uses R sin dudarlo.

    Si tus necesidades solo van a ser una serie de cálculos estadísticos disponibles en python (hay muchísimas librerías estadísticas en python que te dan la mayoría de la funcionalidad de R) y además hacer informes en pdf, publicar resultados en una aplicación web, hacer una herramienta con interfaz gráfica de usuario,…, te recomiendo python.

    Si necesitas el poder de R y el poder de python a la vez, existen formas de usar R ‘dentro’ de python: http://rpy.sourceforge.net/index.html

    Espero haberte aclarado algo.

    Saludos.

    1. hmmm… muchas gracias por la aclaración!… mi interés va por el lado de la estadística y geoestadística, por lo que para ello necesito algunas cosas de R, pero si, me interesa mucho el reporte en pdf y web también ¿tienes información de eso?… no conocía RPy, creo que eso soluciona bastante mis inquietudes.

      Por otro lado, entre la creación de gráficos de R y Python ¿cuál es más sencilla?

      Disculpa las molestias.

      Saludos,

      Andrés

      1. Para añadir un poco de información a lo que ha aportado Kiko, en CrossValidated (el sitio Q&A sobre estadística de la red StackExchange) preguntaban esto mismo:

        http://stats.stackexchange.com/questions/1595/python-as-a-statistics-workbench/16961

        Y, respecto a lo segundo que preguntas,

        • Para crear informes en PDF, algunos han usado ReportLab.
        • Para web, Python se está utilizando bastante y hay muchas soluciones que puedes probar. El framework clásico es Django, que vendría a ser el equivalente de RoR, pero también existen otros como Flask.
        • Y, para crear gráficas, tienes matplotlib. No sé cómo será en R, pero en Pybonacci tienes una suculenta serie de tutoriales de matplotlib 😉

        Un saludo!

      2. Y para hacer gráficas con mapas y proyecciones, basemap, que es un añadido a matplotlib.

      3. Como comenta juanlu, reportlab es una librería muy completa para generar pdfs.
        Para temas de geoestadística (supongo que serán cosas de mapping), django tiene geodjango, que te podría resultar útil. Si quieres ver más cosas de mapping puedes echarle un ojo a la siguiente presentación . Si no quieres meterte en temas web pero necesitas mapping de todas formas, como comenta Jorge, matplotlib + basemap es muy potente.

        En lo que respecta a creación de gráficos, es muy similar. Solo tienes que conocer la sintáxis correcta en R o en la librería gráfica de python que quieras usar.

        Por último, ¿qué necesitas de R? Si nos lo dices igual encontramos la librería python que te resuelve el problema.

        Saludos.

  6. Que gran artículo! personalmente conozco Python hace algunos años y estoy empezando a usarlo en cálculos ingenieriles, pero es un excelente artículo para abrir el apetito y dejar de usar productos tan costosos como Matlab. Todavía nos falta un buen CAD y tendremos todo lo necesario para trabajar en ingeniería con software libre íntegramente. Mis saludos al equipo de Pybonacci.

    1. ¡Gracias! Ciertamente no solo puedes sustituir a MATLAB, sino que en algunos casos es increíblemente superior – ahora mismo estoy trabajando en un proyecto con ambos, y las posibilidades que ofrece Python son mucho mayores a un costo mínimo. Con el tema del CAD poco puedo decir porque yo mismo no he usado ni libres ni no libres, pero he oído que existe LibreCAD:

      http://librecad.org/cms/home.html

      ¡Un saludo!

      1. Totalmente! mencionaba solo como reemplazo de Matlab por el artículo, pero es un lenguaje de programación es decir la imaginación es el límite 🙂 (yo también en mi tesina uso python en todo el scripting así tengo todo en *.xls -por necesidad-, *.tex y un script en bash que hace de make).
        Entre tantos que probé o no lo vi a LibreCAD o entre pruebas lo pase sin mirar, ¡encima lo tengo en Debian! a un par de clics, gracias por la referencia, tiene buena pinta (lo único malo es lo “importante” del formato DWG, eso tenemos que cambiar nosotros los usuarios).

  7. Hola, he estado usando spyder, para instalar el pygtk fue algo dificil, pero al final me funciono, tiene consolo, y un autocompletado no tan completo, digo esto porque a diferencia de netbeans o pydev, cuando uno pone GTK. no sale todos los metodos o propiedades de dicha clase, lo mismo pasa con todoss los widgets, pero si completa codigo de clases propias, quisa falta configurarlo o no lo se.

    Tengo una pregunta, ¿como es la licencia de VIM o Pydev o Ninja IDE?, ¿se puede USAR para escribir un nuevo programa comercial? ¿siempre es obligatorio publicar el codigo fuente?, bueno espero algunas gentiles respuestas. Saludos.

    1. Un software comercial que no incluye en absoluto el codigo de estos buenos programas, sino uno comercial propio, solo usaria estos editores para desarrollar mi propio software.

    2. ¡Hola Luis! La licencia de VIM, PyDev o Ninja IDE es irrelevante, puedes producir código propietario o libre con herramientas propietarias o libres. Son dos asuntos separados 🙂 ¡Un saludo!

  8. amigo podrias ayudarme a graficar esto en python porfavor tu que eres un genio echame una mano apenas voy empezando a programar en python el problema es este = e^t * sen(t)

Leave a Reply

Your email address will not be published. Required fields are marked *