Siendo Python un lenguaje de alto nivel, ¿qué hay de su velocidad?, ¿acaso no es Fortran o C más rápido para el cálculo científico?
En cierto sentido la respuesta es «sí», ya que estos lenguajes son mucho más cercanos al hardware dando más opciones de control y velocidad.
[box]Actualización (2015): Numba es una librería que está cambiando las reglas del juego permitiendo acelerar código Python a velocidades cercanas a C++ con tan sólo un par de líneas más en tu código. En el ámbito científico, numba puede convertirse en una revolución. Si quieres ver un ejemplo en vídeo de numba de nuestro curso online.Antes de seguir,vamos a resumir las mayores virtudes de Python que explican por qué, en estos últimos 10 años, se ha establecido como uno de los lenguajes más comunes para el cálculo científico:
- Python es lenguaje de alto nivel conveniente para un desarrollo rápido de código
- Su filosofía de diseño enfatiza la simplicidad y legibilidad de código
- Posee núcleo de lenguaje relativamente pequeño con el apoyo de magníficas librerías (NumPy, SciPy, pandas, matplotlib etc.)
- Es lenguaje multiparadigma, en el que varios estilos de programación son compatibles (imperativo, orientado a objetos, funcional)
- Lenguaje de programación interpretado en lugar de compilado.
- Es multiplataforma (Windows, MacOS y Linux), gratuito y open source.
Eso esta muy bien, pero entonces, sin ser tan rápido como Fortran o C, ¿por qué es interesante usar Python para cálculo científico?
Hay que recordar tu tiempo es un recurso mucho más valioso que el tiempo de cálculo de un ordenador.
La función objetivo correcta para minimizar el tiempo total sería:
donde el primer término es un factor humano mientras que el segundo es computacional.
Lenguajes de alto nivel como Python o MATLAB están optimizados para humanos, mientras que lenguajes de de nivel inferior, como Fortran y C, están optimizados para ordenadores.
Así, aunque C y Fortran funcionen (mucho) más rápido y den mayor control, usarlos conlleva:
- dedicarle más tiempo a aprender, escribir y depurar código
- direccionamiento detallado (declaración de variables, asignación/desasignación de memoria , etc.)
- necesidad de código repetitivo el cual es tedioso y propenso a errores
Por estas razones, el paradigma científico actual resulta de la combinación de los puntos fuertes de lenguajes de alto y bajo nivel de la siguiente forma:
- Escribir un programa prototipo en un lenguaje de alto nivel como Python
- Si el programa es demasiado lento, entonces analizarlo (profiling) para averiguar donde están los cuellos de botella
- Volver a escribir esas y sólo esas pequeñas partes del código en Fortran / C
- Modificar el programa Python existente para llamar a este nuevo código Fortran / C cuando sea necesario
Si deseas saber cómo implementar código C y Fortran en Python puedes echar un vistazo a este notebook de J.R. Johansson
Nota: Esta entrada es una traducción libre del material disponible (y muy recomendable) de Quantitative Economics.