Inicio » General » De Matlab a Python: Python como lenguaje de programación científico Y técnico

De Matlab a Python: Python como lenguaje de programación científico Y técnico

Creo que la primera vez que utilicé Matlab fué en un laboratorio de Análisis de señales en la Universidad. Hace unos 9 años de eso, y desde entonces lo he estado utilizando con mayor o menor frecuencia, siendo estos dos últimos años cuando el 50% de mi programación la hacía en Matlab.

Hasta ahora no me había preocupado por su precio o su aplicación a problemas reales: tanto en la Universidad como en las empresas donde he trabajado había una licencia de Matlab y usábamos ese entorno para demostrar conceptos. Hasta ahí todo bien. En los últimos meses hemos intentado portar algoritmos desarrollados en Matlab a aplicaciones para clientes (usando el MCR): desde aplicaciones Windows standalone desarrolladas en .NET hasta sistemas distribuidos. La verdad es que en todas hemos tenido problemas. Eso unido al conocimiento del coste de una licencia básica de Matlab (rondando los 40.000€ dependiendo de los Toolboxes) me ha hecho replantearme mi estrategia de prototipado rápido de algoritmos y traslado a aplicaciones reales.

En este tesitura me econtré a principios de 2013 dando un curso de Big Data para el cual usé Python como lenguaje de programación. El resultado: me enamoré 🙂 (tanto que participé en el Tuenti Programming Contest de este año usando sólo Python).

Python es un lenguaje de programación interpretado y con la breve (pero intensa) experiencia que tenía me pregunté: ¿Podría sustituir a Matlab y sus Toolboxes (no hablo de Simulink) como lenguaje de programación más científico? Y después de hacer un par de búsquedas en Google, dije: «of course«. Si a Python se le añaden los módulos correctos, se puede convertir en un auténtico entorno científico. Específicamente hablo de estos módulos:

  • Python
  • numpy
  • scipy
  • matplotlib
  • scikit-learn

Voy a repasarlos brevemente para hacernos una idea de lo que estamos hablando.

Python

Python es la base de todo. Tal y como aparece en Wikipedia, Python es un lenguaje se focaliza en tener una sintaxis limpia y fácil de leer. Yo vengo de la rama de programación C (C++,Java, C#) y mi primera impresión fue: ¿Han sustituido las llaves {} por tabulaciones? ¿Dónde están los «;» al final de cada línea? Una vez te acostumbras es cuando caes en «sus redes» y, desde un punto de vista de un ingeniero, programar en Python es agradecido y bonito. Es más, el uso de la consola y la programación interactiva hacen que esa ventaja de Matlab desaparezca. Además, (me váis a perdonar esta afirmación tan rotunda) Python es un lenguaje de programación «de verdad», cosa que no podemos decir de Matlab: Los índices de los arrays comienzan en el 0 (no en 1 como Matlab), la llamada a los arrays se hace con corchetes (en Matlab parece que estás llamando a funciones al usar el paréntesis), …

Numpy, Scipy y Matplotlib

Aunque son tres módulos (paquetes, extensiones, librerías, como queráis llamarlo) están muy íntimamente unidos.

Numpy es la base y añade a Python funcionalidades para el manejo de matrices y la realización de operaciones matriciales y vectoriales de forma sencilla y eficiente (puede usar MKL y BLAS para mejorar el rendimiento). Este es el paquete que realmente hace que Python se asemeje a Matlab u Octave.

Scipy es la biblioteca científica y usa Numpy como base. Con Scipy se añaden todas las funcionalidades que un ingeniero, estadísta, matemático,… puede querer para el tratamiento de señales, creación de nuevos algoritmos, etc. Algunos ejemplos de paquetes que nos podemos encontrar son: scipy.fftpack, scipy.stats o scipy.optimize. Como se puede ver, este es el equivalente a los Toolboxes y al core de Maltab.

Matplotlib: No es fundamental, pero me gusta añadirlo con los otros dos. Te permite hacer gráficas muy completas para mostrar los resultados de tus pruebas. Es la parte de visualización que aporta Matlab, además de otras funcionalidades adicionales (mi favorita son las gráficas animadas).

Scikit-learn

Un apartado a parte se merece scikit-learn. Todos sabemos que en temas software casi-todo está inventado (y si no lo sabías, creo que deberías replantearte algo…). Mi trabajo consiste en investigar en algoritmos de visión artificial o inteligencia artificial que haga una determinada tarea y demostrar que realmente la hace bien. Evidentemente hay pasos que son estándar o están bien resueltos en el estado del arte y por tanto no merece la pena re-inventar la rueda. Un ejemplo que suelo poner es el de «un clasificador». Casi siempre necesitas clasificar algo en 2 o más clases y por tanto necesitas un clasificador. Evidentemente no vas inventarte uno, por lo que eliges el que más se adapte a tus problemáticas y evidentemente tampoco deberías implementarlo. Para eso hay librerías que ya están ahí  y por eso Matlab tiene tantos adeptos. Por lo que mi trabajo se centra en darle valor añadido a todo eso.

El caso es que scikit-learn es una de esas librerías (en este caso centrada en machine learning) en el que TODO lo que puedas necesitar está implementado. Desde clasificadores o regresores, hasta selección automática de modelos y análisis de resultados. Muy recomendable como sustituta a varios Toolbox de Matlab.

Python vs. Matlab

La mayoría de los puntos de comparativa los he indicado arriba. Como cosas extra que me gustan de Python puede ser que es abierto y contínuamente en evolución, que se usa en grandes empresas, … Si queréis convenceros más, podéis buscar en internet cosas como esta, esta, esta o esta.

Personalmente me gusta ser objetivo con mis decisiones, y por eso también tengo que decir las cosas que me gustan más de Matlab, y son especialmente:

  • Instalas Matlab y empiezas a trabajar (mientras que con Python, teóricamente, debes instalar los módulos a usar de forma individual, aunque en la práctica puede no ser así)
  • Para un principiante es un lío el que Python tenga sus versiones Python 2.X y Python 3.X en paralelo e incompatibles entre sí (yo siempre uso Python 2.X)
  • Si sabes muy bien cómo programar en Matlab (como es mi caso) hay cosas puntuales que pueden hacerse más fácil en Matlab
  • Todavía hay mucho código científico generado por univesidades que está en Matlab, por lo que no podrás reutilizarlo si no lo portas

¿Cómo empiezo a usar Python como sustituto de Matlab?

  1. Es bastante sencillo empezar con Python si ya sabes programar. Recomiendo no complicarse y usar directamente el tutorial oficial de Python. También hay otras posibilidades como el curso de Python ofrecido por Google.
  2. En vez de instalar Python desde creo, es mejor instalar una distribución completa, que venga con todo lo necesario. Como vamos a sustituir a Matlab, lo mejor es WinPython o Python(x,y). Personalmente me gusta más la primera porque tiene una interfaz específica para instalarle nuevos paquetes. A pesar de ser diferentes, ambas distribuciones son muy similares y traen Spider como IDE. Me gusta bastante y es muy similar a Matlab: tiene su intérprete (es más puedes abrir varios en paralelo, cosa que no era posible en Matlab), su editor de código, visualizador de variables, archivos e incluso un profiler.
  3. Con esto, ya serás capaz de programar en Python y hacer alguna prueba. Para empezar a sustituir Matlab, necesitarás conocer Scipy y Numpy. Lo que te propongo es que empieces a programar como si estuvieses en Matlab y cuando quieras una funcionalidad, búscala en Google. Parece una tontería, pero no lo es y realmente te ayuda a empezar.
  4. Cuando ya empieces a conocer la sintaxis, funciones básicas y nomenclaturas, puedes pasar al segundo plato. Aquí tienes una lista muy completa de funciones de Matlab/Octave y su equivalente en Numpy/Scipy/Python. De acompañamiento también tienes una guía bastante extensa de Numpy for Matlab users.
  5. En este punto ya estarás en el momento crítico en el que empieces a desengancharte de Matlab. Por eso, ya se puede pasar al plato fuerte, un tutorial del funcionamiento de Numpy, así como todas las funcionalidades de Scipy.

Final remarks

Se puede ver que me gusta bastante Python y además lo recomiendo (también puede ser que me guste porque la filosofía pythonista está bastante alineada conmigo). Pero para acabar, quería hacer dos comentarios:

8 pensamientos en “De Matlab a Python: Python como lenguaje de programación científico Y técnico

  1. ¡Muy interesante post! Gracias. Justo ahora me encuentro en la disyuntiva de salir de mi día a día con Matlab e introducirme en Python y tu entrada ha sido muy esclarecedora. Un saludo.

  2. La verdad es que hace un mes cuando todo lo quería programar en MATLAB, leí este post y causó mucho impacto sobre mi, por lo que me di a la tarea de aprender a programar en Python y encontré este curso de Codecademy :
    http://www.codecademy.com/tracks/python-latinamerica?jump_to=505897289a61bf2126000026
    el curso es sorprendentemente enriquecedor, tanto que, en este mes y leyendo en el manual y algo de Tkinter puedo hacer ya casi todo lo que hacía en MATLAB. Me sucedió lo mismo que a ti : me enamoré.

    En este preciso instante estoy viendo como consigo e incluyo las librerías Numpy scipy y Matplotlib. Gracias por convencerme, no me atrevía a aprender otro lenguaje por un inepto temor infundado y ahora que lo estoy haciendo empecé a entender mas los conceptos importantes de programación, como son los paradigmas y en especial la programación orientada a objetos.

    Lo que mas me gusto de Python es que a pesar de ser fuertemente tipado, en una lista puedo guardar objetos de diferentes clases :D, cosa con la que las estructuras y celdas de MATLAB no pueden competir, ademas de los diccionarios que hacen estar a Python fuera del concurso.
    Excelente post amigo, excelente post.

  3. ¡hola de nuevo, Sergio! una pregunta, que creo que te resultará estúpida pero ahí va: quiero insertar un código python en mi página de wordpress, ¿cómo puedo insertarlo para que también sea fácil de copiar?
    un saludo y gracias
    P.S: ya he usado un repositorio, pero me gustaría que estuviera en la misma página y se pudiera ver de un vistazo.

Deja un comentario