Lo que he aprendido: de Matlab a Julia

Hoy vengo a contaros una historia que se inició cuando volví de las vacaciones y descubrí que necesitaba reactivar la licencia de Matlab. Esto llevó a un lío en el que el servicio informático me desinstaló el programa y me instaló una versión hipervieja, en mi departamento me contaron que no, que no tenía que haber contactado con el servicio informático que la licencia la llevaba otra persona, tuve que desinstalar el Matlab viejo, reinstalar el nuevo y activar la licencia como decía esa persona. En definitiva, dos días de trabajo perdidos.

Si ya detestaba Matlab, esto me llevó a odiarlo aun más y buscar una alternativa libre y viable lo antes posible. Ya había andado con GNU Octave antes, pero no quería pasarme a algo que fuera siguiendo a Matlab (y a su sintaxis incoherente, sus funciones cambiantes de versión a versión y demás mierdas variadas que me sacn de quicio). Así que me puse a investigar lo que según el Fediverso es la mejor alternativa libre: el novedosísimo lenguaje de programación Julia cuya versión 1.0 es de agosto de este mismo año.

Sobre el lenguaje

Dicen sus creadores que cuando diseñaron Julia querían un lenguaje abierto (lleva licencia MIT porque se creó en el MIT), tan rápido como C, tan dinámico como Ruby, homoicónico como Lisp, con una notación matemática tan sencilla como la de Matlab, tan generalista como Python, tan útil para cálculo estadístico como R, con tantas capacidades para trabajar con texto como Perl y tan bueno juntando programas entre sí como un intérprete de comandos. Algo sencillo pero que satisficiera a los expertos, que fuera interpretado y compilado. Poquita cosa, vamos.

Lo presentaron en un paper, cosa que a mí ya me gana, y con unos números bastante espectaculares en el benchmark en el que pulen a Matlab en tiempos de computación y se acercan peligrosamente a C++, que toman como referencia. Del lenguaje poco más os puedo decir porque no entiendo nada más, solo que está escrito en una mezcla de C, C++ y Scheme, cosa que lo hace cuanto menos exótico.

En fin, centrándonos en cómo ponernos ya mismo a programar en Julia, no tenemos más que ir a su página de descargas y elegir nuestro método favorito. Yo, de momento, me he instalado el cacharro en el Windows del trabajo.

Diferencias con Matlab

En mi caso concreto que vengo de Matlab, lo que me interesa saber es cuánto de mi conocimiento actual puedo reciclar y la buena nueva es que ¡mucho! La sintaxis de ambos lenguajes es practicamente igual con algunas pequeñas diferencias a las que me he acostumbrado rápido, por ejemplo:

  • Los paréntesis solo se usan para pasar argumentos a las funciones, para elegir elementos de una matriz se usan los corchetes
  • No se copian las matrices, cuando hacemos A = B si cambiamos B cambia A
  • Para aplicar cierta operación elemento a elemento tenemos el operador splat ... o la construcción f.(x)
  • No se agrandan las matrices automáticamente, lo que nos obliga a prealquilar memoria
  • Se pueden tener todas las funciones que se quiera en un mismo archivo

Para los primeros días de locura tenemos hasta un traductor Matlab – Julia que nos ayuda a detectar estas pequeñas diferencias que son difíciles de ver.

Lo que más he notado es que Julia nos obliga a tener buenas prácticas a la hora de programar. Os pongo un ejemplo que me encanta: cuando calculas los autovalores con un método iterativo como Lanczos, te da cada vez cosas diferentes porque empieza con un vector aleatorio si tú, so vago matlabil, no le dices de dónde debe empezar, cosa que deberías hacer porque es tu matriz.

Otro tema chulo y diferente a Matlab es que Julia tiene un gestor de paquetes y debemos decirle explícitamente qué paquetes estamos usando en nuestro script o función con using PAQUETE. De momento he usado Polynomials, Plots, un paquete para cálculo simbólico y otro para matrices dispersas, todos ellos han funcionado muy bien y solo les puedo poner como pega que a veces la documentación es liosa, supongo que porque acaba de salir la versión 1.0. Se pueden además usar paquetes de Python, R o Matlab lo que hace que siempre tengamos recursos para nuestro caso de uso.

Mi entorno juliano actual

Ahora mismo estoy usando la consolilla de Julia (el Julia REPL) en Atom con la extensión Juno. Fui muy reacia a instalar Atom porque consume muchísimos recursos, pero ahora mismo en Windows es la mejor opción. Se instala en nada, tienes todo centralizado y funciona correctamente.

Y tiene un nivel de cuquismo elevado como podéis ver en la siguiente captura de pantalla:

Captura de pantalla de mi entorno para usar Julia en Atom

¿Por qué no desde Emacs?

Creedme cuando digo que lo intenté pero fue imposible. La explicación es sencilla: Windows. La mitad de los paquetes que permiten usar Emacs como IDE de Julia no carrulan en Windows. En teoría con instalar julia-mode y julia-repl o julia-shell-mode debería ser suficiente, pero después de horas infructuosas me rendí. Aun así, mereció la pena la investigación porque descubrí ESS, un modo de Emacs para hacer análisis estadísticos al que espero volver algún día.

Conclusión

Como conclusión os digo que aunque lo he tocado poquito, Julia me encanta, hace lo que yo quiero, es natural programar en él y hay todo tipo de paquetes. Intentaré ir migrando todo mi código de Matlab a Julia e iré compartiendo con vosotros truquillos que vaya descubriendo.

¡En algún momento habrá código que Julia para calcular con elementos finitos gracias a mí! Hasta ese día podéis ir leyendo los enlaces que os dejo en las referencias 🙂

Referencias

Julia: A Fast Dynamic Language for Technical Computing

Julia for Matlab users

Crítica a Matlab en Neuroplausible

How I self-radicalised (an open science manifesto, part 1)

Documentación de Julia

A Deep Introduction to Julia for Data Science and Scientific Computing

Comparación entre Python, Matlab y Julia

Diferencias entre Matlab y Julia

Podcast con los creadores del lenguaje

Chuletilla

Think Julia

Julia Express (pdf)

6 pensamientos en “Lo que he aprendido: de Matlab a Julia

  1. Pingback: En qué ando: ¡edición precumple! | Onda Hostil

  2. Pingback: El 2018 | Onda Hostil

  3. Pingback: Compilación: los artículos del 2018 | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s