Curso de Python para Ingenieros Mecánicos

Por: Eduardo Vieira



Introducción


Se ha incluido información de los notebooks en inglés de J.R. Johansson (robert@riken.jp) http://jrjohansson.github.io/ Traducido/Adaptado por G.F. Rubilar.

También se han incluido elementos del tutorial de Damián Avila https://github.com/damianavila/Python-Cientifico-HCC y del cusro de Python para Ingenieros aeronáuticos de Juan Cano https://github.com/AeroPython/Curso_AeroPython

Con modificaciones y contenido propio.

El Lenguaje de programación Python

¿Qué es Python?

Python es un lenguaje de programación moderno, de propósito general, orientado al objeto y de alto nivel. Fue creado por Guido van Rossum, conocido como el BDFL ("Benevolent Dictator for Life", es decir "Dictador Benevolente Vitalicio" del proyecto Python). La primera versión (0.9.0) de Python fue lanzada en 1991, y la versión 1.0 en 1994.

Algunos de los principios bajo los que está concebido el lenguaje (Tim Peters, "El Zen de Python") son:

  • Bello es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • La legibilidad cuenta.
  • Los casos especiales no son tan especiales como para quebrantar las reglas.

Características generales de Python:

  • Lenguaje fácil de aprender.
  • Lenguaje versátil en su utilización.
  • Lenguaje limpio y simple: Código fácil de leer e intuitivo, sintaxis minimalista y fácil de aprender. Su mantención escala bien con el tamaño de los proyectos.
  • Incorpora una colección de herramienta básicas para el tratamiento y visualización de datos.
  • Suministra un "entorno" unificado e interactivo.
  • Requiere un tiempo de desarrollo reducido y un tiempo de ejecución razonable.

Detalles técnicos:

  • Tipado dinámico: No se necesita definir el tipo de las variables, argumentos de funciones, ni tipos de retorno.
  • Manejo de memoria automático: No se necesita reservar explícitamente memoria para las variables y los arreglos de datos. Sin bugs de fuga de memoria.
  • Interpretado: No se requiere compilar el código. El intérprete Python lee y ejecuta el código python directamente.

Ventajas de Python:

  • La principal ventaja es la facilidad de programar, minimizando el tiempo requerido para desarrollar, depurar y mantener el código.
  • Lenguaje bien diseñado que fomenta muchas buenas prácticas de programación:
    • Programación modular y orientada al objeto, buen sistema para empaquetar y reusar código. Esto a menudo resulta en un código más transparente, mantenible, y libre de bugs.
    • Documentación estréchamente integrada al código.
  • Un gran librería estandar, y una gran colección de paquetes externos.

Desventajas de Python:

  • Como Python es un lenguaje interpretado y de tipado dinámico, la ejecución de código python puede ser lenta comparada con lenguajes compilados y de tipado estático, tales como C y Fortran.
  • Algo descentralizado, con diferentes ambientes, paquetes y documentación diseminada en distintos lugares. Esto puede hacer difícil el comienzo.

In [ ]:
import this

Python versus Matlab

Ventajas de Matlab:

  • Múltiples bibliotecas con numerosos algoritmos para la resolución de diferentes problemas.
  • Una rápida ejecución debido a que las bibliotecas están, normalmente, escritas en un lenguaje compilado.
  • Un entorno de desarrollo agradable y funcional.
  • Soporte comercial disponible.

Desventajas de Matlab:

  • El lenguaje de base puede ser restrictivo para usuarios avanzados. No hay acceso al código fuente.
  • "Show me the money..."

Python versus lenguajes compilados (Fortran, C, C++)

Ventajas de Fortran, C, C++:

  • Rápidos.
  • Compiladores super optimizados.
  • Bibliotecas científicas super optimizadas (desde antaño).

Desventajas de Fortan, C, C++:

  • No hay interactividad durante el desarrollo (necesariamente, hay un paso de compilación).
  • Sintaxis compleja.
  • Manejo manual de la memoria.

¿Qué hace a Python adecuado para la Computación Científica?

  • Python tiene una posición fuerte en la computación científica:

    • Gran comunidad de usuarios. Es fácil encontrar ayuda y documentación.
  • Extenso ecosistema de librerías científicas y entornos

  • Gran desempeño debido a la gran integración con códigos altamente testeados y optimizados escritos en C y Fortran:

    • blas, atlas blas, lapack, arpack, Intel MKL, ...
  • Buen soporte para:

    • Procesamiento en paralelo.
    • Comunicación entre procesos (Interprocess communication, MPI).
    • Cálculo con GPU (OpenCL y CUDA).
  • Disponible y apropiado para uso con cluster de cálculo de alto desempeño (high-performance computing clusters).
  • ¡Sin costos de licencia y de código abierto!.
  • Creciente y pujante comunidad apoyando el desarrollo y evolución del lenguaje.

Desventajas:

  • Un entorno de desarrollo menos agradable comparado con Matlab (totalmente discutible.... Esto está cambiando rápidamente gracias a los IPython Notebooks).
  • Algunos algoritmos especializados todavía no se han desarrollado (pero no falta mucho...).
  • Relativamente lento... (varias soluciones disponible y en desarrollo).

Spyder

Spyder es un IDE (entorno de desarrollo interactivo, por su sigla en inglés) similar a MATLAB para computación científica con Python. Tiene muchas de las ventajas de un IDE, como por ejemplo que todo, desde la edición del código, su ejecución y depuración, es realizado en un mismo entorno, y el trabajo de diferentes cálculos puede ser organizado como proyectos en el IDE.

Algunas ventajas de Spyder:

  • Poderoso editor de código, con coloreado de sintaxis, introspección dinámica de código, e integración con el depurador de Python.
  • Explorador de variables, prompt de comando IPython.
  • Documentación y ayuda integrada.

IPython (Jupyter) notebook

IPython notebook es un entorno "de cuaderno'' basado en HTML para Python, similar a Mathematica o Maple. Originalmente estaba basado en la shell IPython, pero suministrando un ambiente basado en celdas con gran interactividad, donde los cálculos pueden ser organizados y documentados en una forma estructurada.

Aunque se usa el navegador web con interfase gráfica, los notebooks IPython/Jupyter usualmente se ejecutan localmente, en el mismo computador que ejecuta el navegador. Para iniciar una nueva sesión de IPython notebook, ejecute el siguiente comando:

$ ipython notebook

desde una carpeta en que que desea almacenar los cuadernos. Esto abrirá una nueva ventana del navegador (o una nueva pestaña en una ventana existente) con una página índice donde se muestran los cuadernos existentes y desde donde nuevos cuadernos pueden ser creados.

En el año 2014, los desarrolladores del Ipython Notebook decidieron crear el proyecto Jupyter que independiza la interfase del notebook del lenguaje de programación particular que se use (originalmente, Python). Esto permite usar las funcionalidades de interactividad de los notebooks con distintos lenguajes.

Versiones de Python

Existen actualmente dos versiones de Python: Python 2 y Python 3. Python 3 eventualmente reemplazará a Python 2, pero no es 100% compatible con Python 2. Mucho del código Python existente ha sido escrito para Python 2, y aún es la versión más popular. En estas clases cualquiera de las dos versiones puede usarse, pero es probablemente más simple quedarse con Python 2 por ahora, ya que está más comúnmente disponible en paquetes precompilados e instaladores binarios.

Para ver qué versión de Python tiene, ejecute

$ python --version
Python 2.7.6

$ python3 --version
Python 3.4.0

Es posible instalar varias versiones de Python en paralelo.


In [2]:
# Esta celda da el estilo al notebook
from IPython.core.display import HTML
css_file = './css/aeropython.css'
HTML(open(css_file, "r").read())