¿Cuáles son las ventajas y desventajas de los lenguajes de script para la informática científica?

El curso Python / NumPy es probablemente el mejor camino a seguir, especialmente porque es posible que desee ampliar este proyecto. Recomiendo usar los complementos de Pylab que hacen que Python / Numpy esté lo más cerca posible de Matlab [0].

Supongo que no va a escribir integradores personalizados para su PDE / ODE específica [1], por lo que los integradores en SciPy / NumPy probablemente sean suficientes.

En mi experiencia con la resolución de grandes sistemas de EDO, la verdadera compensación en el uso de Python en lugar de C ++ o Fortran es la gran pérdida de velocidad. Para tener una idea de por qué ocurre esta diferencia, importe BLAS o LAPACK en C ++ y en Python (por ejemplo, solo use NumPy) y luego ejecute una secuencia en un programa que multiplique dos matrices. Verá que Python pierde una cantidad significativa de tiempo haciendo llamadas que podrían ser redundantes [2]. No veo ninguna razón para usar Matlab a menos que tenga necesidades de integración muy específicas. Matlab tiene algunas herramientas excelentes para sistemas dinámicos que Python no tiene (por ejemplo, Dfield [3]), pero dependiendo de su análisis, no estoy seguro de si esto ayudará. En mi experiencia, he encontrado que Matlab es bastante más lento que hacer cosas en Pylab.

En términos de cómputo paralelo, Python es un lenguaje adecuado para hacer algunas pruebas básicas, pero realmente desea escribir cosas en C ++ / Fortran. Si tiene un clúster, usar OpenMPI en Python es bastante fácil y es una buena manera de ver qué tan paralelo es su código.

Como nota final, mi flujo de trabajo personal con análisis numérico es aproximadamente el siguiente:

  • Codifique un script de prueba en Python para mi cálculo. Intente hacerlo lo más modular posible [4] (p. Ej., Tenga un script que realice la integración, otro script que valide el paso de integración, otro que haga cumplir las condiciones de contorno).
  • Haga algunas pruebas del tiempo que toma, vea si hay algo que pueda ser paralelo
  • Si es súper lento, tome mi código Python como esqueleto para el código C ++. Si es tan vergonzosamente paralelo como sea posible, entonces intentaré editar mi código para usar OpenMPI (que es bastante fácil de hacer)

¡Espero que esto ayude! No dudes en hacerme cualquier otra pregunta que tengas, también soy bastante nuevo en esto.

[0] http://www.scipy.org/PyLab

[1] Esto realmente hace una gran diferencia al hacer simulaciones. Sin embargo, el problema es que se necesita una enorme cantidad de esfuerzo para encontrar el integrador simpléctico “correcto” para su sistema. También es bastante fácil codificar una integración como Verlet o Symplectic Euler en Python, por lo que siempre puede tener integradores ‘pseudo’-personalizados en los que cambie algunos parámetros pero no el algoritmo principal en sí.

[2] Esto también podría ser culpa de NumPy, no estoy seguro. Tengo algunos compañeros de trabajo que han enumerado una serie de fallas de diseño en NumPy y por qué se considera mal escrito. Sin embargo, no he tenido ningún problema directo con NumPy, así que realmente no puedo dar más color sobre estos defectos de diseño.

[3] http://math.rice.edu/~dfield/dfp…

[4] En Python generalmente uso el truco if __name__ == __main__ para tratar mis programas independientes como módulos.

Depende de las necesidades computacionales y el rendimiento. Si desea lograr una salida de alto rendimiento, la mejor manera de lograrlo es ejecutar el código nativo. Pero en estos días, los lenguajes interpretados están siendo altamente optimizados para el rendimiento a medida que el análisis de datos y la minería se convierten en los enormes datos compartidos en Internet, incluso para las investigaciones científicas. Python es uno de los lenguajes populares disponibles con mucha bondad de los conceptos de programación orientados a objetos. Si las personas optan por lenguajes interpretados, por supuesto, la facilidad de creación de prototipos y gestión de código es lo primero y más importante.
Por otro lado, las herramientas profesionales como MATLAB pueden ayudarlo a resolver los problemas fácilmente. Hay varias herramientas, funciones, gráficos, complementos disponibles para la mayoría de los dominios científicos.

Si fuera un científico, probablemente usaría Haskell, Racket u Ocaml. Un lenguaje funcional ayuda a reducir el desajuste de impedancia entre un modelo matemático y su realización de software. Las matemáticas no tienen un estado mutable compartido. Los tres idiomas que nombré tienen compiladores que generan código de alto rendimiento, grandes colecciones de bibliotecas, comunidades vibrantes y buenas FFI para llamar a los antiguos programas de C.

Aunque personalmente tiendo a escribir mis scripts de shell en Haskell, sospecho que la mayoría consideraría que estos no son lenguajes de scripting. Ciertamente no son Python, que parece ser lo que se entiende por lenguaje de script aquí. Python tiene cualquier cantidad de … rarezas … bien documentadas que creo que lo hacen inadecuado para escribir código que está destinado a generar datos confiables y reproducibles para uso científico.