Pregunta suave: ¿Dónde encaja Python en la imagen?


9

Así que he estado debatiendo si debería molestarme o no en aprender Python. Al hablar con mis profesores, Matlab parece ser el lenguaje común utilizado en matemáticas aplicadas / ciencias computacionales en lo que respecta a la academia ; mientras que en la industria , mis profesores (especialmente aquellos que han trabajado en la industria) han dicho que aprender c ++ es la ruta más segura.

Quisiera saber de ustedes, tanto en la academia como en la industria, si debería molestarme con Python o simplemente ser realmente bueno en lo que sé (MATLAB y C ++) por el momento.

Actualización : Geoff plantea un buen punto, probablemente debería establecer algunos detalles más:

Actualmente soy estudiante de pregrado en mi último año, estudio matemáticas con una especialización en computación. Me gustaría seguir una escuela de posgrado y seguir investigando (nunca me había visto disfrutando de la enseñanza) o trabajar en un laboratorio. Ambos son ideales. En cuanto a qué áreas de investigación, probablemente sea algo similar a un análisis numérico o probabilidad. En caso de que el plan A no funcione, estaría abierto a trabajar en la industria, siempre y cuando prepararme para la industria no me quite demasiado tiempo de la escuela. Entonces, pensé que debería aprender los idiomas que son comunes en la industria solo como respaldo. Pero también es por eso que estoy en conflicto. No puedo estudiar todos los idiomas ni prepararme para todas las posibilidades, ya que eso tomaría demasiado tiempo.


1
Su pregunta es buena, pero probablemente demasiado abierta y vaga. ¿Qué disciplina estás estudiando y qué crees que quieres hacer?
Geoff Oxberry

1
Para ver un ejemplo de cosas que se pueden hacer con Python que no funcionarían bien en MATLAB o C ++ puro: epubs.siam.org/doi/abs/10.1137/110856976 . (alerta de autopromoción descarada)
David Ketcheson

Respuestas:


15

Una dificultad con cualquiera de estos tipos de preguntas es que la respuesta depende mucho de la comunidad.

Para responder algunas de sus preguntas en orden aleatorio:

MATLAB se usa mucho tanto en la academia como en la industria. Una de las razones por las que se usa bastante en la industria es porque se enseña en la academia. Sé con certeza que MATLAB se utiliza en el Laboratorio Lincoln y en las divisiones de investigación y desarrollo de DuPont.

Hay paquetes de software escritos en Python que son buenos para el cálculo simbólico, como sympy y SAGE. Dependiendo de sus intereses particulares, requisitos de características y preferencias personales, Mathematica (o Maple u otros sistemas de álgebra computacional) pueden ser superiores a estos paquetes.

MATLAB tiene una Caja de herramientas de matemática simbólica que se puede usar para algunos cálculos simbólicos, pero sus capacidades de manipulación simbólica, en mi experiencia, son más débiles que Mathematica y Python. Cierta manipulación simbólica podría hacerse teóricamente en C ++, pero es difícil de manejar. MATLAB tampoco es un buen lenguaje de propósito general. Hace bien el álgebra lineal y las matemáticas numéricas, pero no tiene buenas capacidades de entrada / salida. No tiene buenas capacidades paralelas (aunque existen variantes como MATLAB paralelo, MATLAB Star-P y la Caja de herramientas de computación paralela) en comparación con C ++ o Python. Incluso sus capacidades gráficas podrían usar algo de trabajo. MATLAB también es costoso a menos que esté afiliado a una institución que tenga una licencia. Cada caja de herramientas es costosa de comprar y generalmente cuesta del orden de cientos a miles de dólares.

Mathematica hace cómputo numérico además del cómputo simbólico. No he visto a personas usarlo para el cálculo numérico tanto como he visto a personas usar Python y MATLAB para trabajo numérico. También tiene capacidades paralelas, pero no escalará a grandes supercomputadoras.

Python es un buen lenguaje de propósito general que se considera fácil de aprender y usar. Se usa en supercomputadoras grandes (ver, por ejemplo, PyClaw, petsc4py, mpi4py y otras), y se escala bien. También tiene paquetes numéricos de gran prestigio (como NumPy y SciPy); una comunidad grande y activa; buenas capacidades de procesamiento de entrada / salida; y buenas bibliotecas de gráficos, junto con un gran depósito de bibliotecas (consulte PyPI). Es gratis, en comparación con los paquetes propietarios mencionados anteriormente. Puede encontrar la mayor parte de la funcionalidad de MATLAB o Mathematica en paquetes Python disponibles gratuitamente. La principal desventaja de Python es que tiende a ser más lento que los lenguajes compilados como C ++, aunque esta desventaja está disminuyendo con el desarrollo continuo de Cython, Numba y PyPy; también se puede mitigar reemplazando el código de Python más lento con código C (o C ++ o Fortran) y envoltorios de Python escritos de manera apropiada. Al ser interpretadas, muchas personas reportan una mayor productividad con Python que los lenguajes compilados. Es bastante popular, y probablemente valga la pena aprenderlo si tienes tiempo.

C ++ es un lenguaje complicado, y su uso en ciencia computacional es controvertido. Su amplio conjunto de funciones puede facilitar la escritura de software que es difícil de mantener y que lleva mucho tiempo compilar. Sin embargo, si se usa con prudencia, las características como la creación de plantillas y la sobrecarga del operador pueden emplearse con gran efecto, como lo ha sido en proyectos como Deal.II, Blaze y Elemental (entre otros). C ++ tiene una curva de aprendizaje pronunciada cuando se trata de sus funciones avanzadas, y he escuchado informes anecdóticos de personas que tardan años en sentir que han aprendido el idioma completo. Sin embargo, también es un lenguaje popular, a pesar de las preocupaciones de usabilidad y el complicado conjunto de características. Probablemente valga la pena aprender, aunque solo sea para ser más empleable; Sus principales competidores en ciencias computacionales son Fortran y C, que también vale la pena aprender.

Lo que decida aprender se basará en lo que realmente necesita. Claro, es bueno aprender Python y C ++, pero dadas las limitaciones de tiempo y recursos, probablemente solo aprenderá lo que realmente necesitará usar, y eso depende de la comunidad en la que trabaje.


Entonces, en lo que respecta a la academia, ¿diría que es mejor invertir tiempo aprendiendo Python en lugar de C ++?
AlanH

1
De nuevo, todo depende. Todavía estoy más en el lado académico de las cosas, y uso Python todo el tiempo. También tengo que usar C ++ para el trabajo escrito en ese lenguaje. Mi opinión personal es que aprender Python primero probablemente dará sus frutos más rápidamente que si aprendió C ++ primero, pero no sé qué probabilistas / procesos estocásticos / combinatorios usan las personas, por lo que su kilometraje puede variar.
Geoff Oxberry

Estoy de acuerdo con Geoff en que aprender Python primero es una buena idea, ya que te ayudará a avanzar mucho más rápido. C ++ es un buen lenguaje, pero la curva de aprendizaje es significativamente mayor y aprenderlo a medias es mucho peor que no aprenderlo en absoluto.
LKlevin

"C ++ tiene una curva de aprendizaje abrupta cuando se trata de sus características avanzadas, y he escuchado informes anecdóticos de personas que tardan años en sentir que han aprendido el idioma completo". Sí, no podría estar más de acuerdo. Creo que cualquier programador que valga la pena debería aprender c / c ++ en algún momento de su vida, pero definitivamente te tomará 10000 horas sentirte realmente como un experto con ellos. +1
James

11

Como señalaron Misha y Geoff Oxberry, Mathematica realmente tiene un enfoque diferente (solo porque puedes clavar un clavo con un destornillador no significa que debas hacerlo). Entonces considero que su pregunta es "Si conozco a Matlab, ¿por qué debería aprender Python?" [Editar: y, al parecer, tú también.]

Para todos los efectos, Matlab es el inglés de la informática científica, con todas las connotaciones positivas y negativas que conlleva esta analogía. Un buen punto específico es que es probable que el código de Matlab sea útil (es decir, ejecutable y comprensible) para más personas que el código en cualquier otro idioma. (Esta es la razón principal por la que proporciono códigos de Matlab para todos mis algoritmos). Además, el escritorio de Matlab puede ser realmente útil durante la creación de prototipos, especialmente la capacidad de ejecutar bits de código (celdas) directamente desde el editor, así como en profiler.

Dicho esto, si quieres aprender otro lenguaje de alto nivel para divertirte y obtener ganancias, podrías hacerlo peor que Python. Algunas razones además de lo que Geoff enumeró:

  • Es mucho más fácil interactuar con programas y bibliotecas externas en Python. ¡No más archivos mex!

  • Si está lejos de su escritorio, es mucho más fácil tener Python + NumPy / SciPy en funcionamiento que tener acceso a una licencia de Matlab.

  • La razón principal por la que Matlab es más rápido que NumPy es porque agrupa bibliotecas de proveedores optimizadas para álgebra lineal (MKL, ACML). Es posible ( aunque un poco tedioso ) construir su propio NumPy y vincularlo con las mismas bibliotecas para obtener casi el mismo rendimiento (y multihilo) que Matlab para álgebra lineal, más el mejor rendimiento de Python para todo lo demás. (Aunque eso, por supuesto, requiere una licencia incluso para uso académico, lo que niega el bono de software gratuito, sigue siendo una opción interesante tener el mismo código funcionando en una instalación acelerada patrocinada por el empleador en la oficina, así como en una plataforma estándar) instálelo en su máquina doméstica o portátil).

  • Si bien las cajas de herramientas de Matlab son uno de sus puntos de venta, hay algunas áreas donde Python está muy por delante; en particular, SymPy y FEniCS superan a las cajas de herramientas Symbolic y PDE por un amplio margen.

  • No olvide la parte divertida (a pesar del espacio en blanco semántico y el enlace de nombres ): he visto a varios colegas mordidos por el error de Python, y realmente hay algo extrañamente satisfactorio al escribir su algoritmo en Python que no está allí en Matlab ( aunque eso podría ser la alegría de aprender un idioma extranjero) :)

(Si comienza con NumPy, puede encontrar útil esta página ).


5

Python puede ser un reemplazo tanto para c ++ como para Matlab. Está bien difundido tanto en la academia como en la industria. En la industria, a veces se usa como pegamento para lenguajes de nivel inferior, principalmente c / c ++. Mathematica es completamente otra historia. Su principal ventaja es donde todos los demás mencionados (c / c ++; Matlab; Python) no son buenos: en cálculos simbólicos.

Entonces, los cuatro son completamente diferentes: c ++ es un lenguaje de programación antiguo y estable de nivel relativamente bajo; Python es un lenguaje informático nuevo y en evolución de alto nivel; Matlab es un entorno computacional numérico con un fuerte acento en el álgebra vectorial (aunque es capaz de hacer más o menos todo); Mathematica es un sistema de álgebra computacional con un fuerte acento en los cálculos simbólicos (el mismo comentario que con matlab). Por lo tanto, no son competidores.


En efecto; A menudo me quedo perplejo (y, a veces sorprendido) cuando veo a la gente usa Mathematica para la computación científica ...
Cristiano Clason

@ChristianClason y Misha: es un error pensar que Mathematica es principalmente un sistema de álgebra computacional. Si nos fijamos en cómo las personas lo utilizan , la mayor parte es no álgebra simbólica, y en varios campos numéricos que es competitiva con herramientas como MATLAB y R. (Personalmente yo elegiría Mma sobre estos otros dos para la mayoría de los datos numéricos procesamiento de tareas , pero eso es, por supuesto, una preferencia personal.) En algunas áreas, como la integración numérica o la visualización, parece estar por delante de MATLAB. En otros, como PDE, la resolución está muy por detrás.
Szabolcs

Para alguien cuyo único interés es la computación numérica, Python es una alternativa a MATLAB que es un lenguaje de nivel relativamente alto que es similar en su capacidad de hacer uso de rutinas de biblioteca para manejar cálculos estandarizados que involucran álgebra lineal, transformadas de Fourier, funciones especiales, etc. Sí, Python es mucho más aplicable en términos generales, pero cubre todo lo que puede hacer en MATLAB.
Brian Borchers

4

Sé que su pregunta es sobre el uso de python, pero usted dijo que estaba interesado en el "análisis numérico o la probabilidad". No sé si has considerado R , pero está diseñado específicamente para este tipo de trabajo. R es un lenguaje muy poderoso para probabilidad y estadística, y tiene una base de usuarios muy grande y activa de matemáticos y científicos.

R es diferente de Matlab en el sentido de que es de código abierto, tiene un enfoque estadístico y hace algunos gráficos muy impresionantes (ver ggplot2 ). Puedes hacer casi todo en R que puedes hacer en Matlab, pero mi aspecto favorito es la contribución del usuario. La mayoría de las bibliotecas contribuidas están escritas por científicos y publicadas en una revista estadística. También tienen guías extremadamente bien escritas (llamadas referencias y viñetas). Mi nueva biblioteca favorita ofrece soporte CUDA integrado en las bibliotecas CULA (gratis para uso académico). Existe también una cantidad prodigiosa de métodos para la teoría de la probabilidad (ver aquí ).

De todos modos, R definitivamente está diseñado específicamente para su línea de trabajo, así que compruébelo y considere agregarlo a su kit de herramientas :) Recuerde, puede ejecutar scripts R dentro de Python y scripts Python dentro de R, y capturar fácilmente los resultados.

¡La mejor de las suertes!


2

Otros ya han comentado extensamente y con más profundidad de lo que intentaré aquí. Sin embargo, me gustaría resaltar un punto una vez más: depende de su comunidad. Por ejemplo, si está trabajando en un proyecto de ingeniería eléctrica, es probable que esté usando matlab; lo mismo puede ser cierto si usted es un analista numérico que desea verificar su estimación de la tasa de convergencia en un problema de modelo simple.

Por otro lado, si te gusta la informática científica propiamente dicha (p. Ej., Simular el flujo alrededor de una superficie aerodinámica, simular la fusión nuclear en un plasma, simular la convección en el manto terrestre) o desarrollar métodos numéricos con tales aplicaciones en mente, entonces el lingua franca es C ++. Todos los paquetes de computación científica a gran escala se escriben hoy en C ++ (o C), para bien o para mal, y así es como se mantendrá durante mucho tiempo. Por nombrar solo algunos ejemplos, PETSc y los paquetes Trilinos increíblemente grandes y diversos están escritos en C y C ++, respectivamente. Entre las grandes bibliotecas de elementos finitos de código abierto que se me ocurren (libMesh, deal.II, oofem, freefem), todas están escritas en C ++. Entre los programas de visualización, los dos más grandes (Visita y Paravista) están escritos en C ++. Podría extender la lista.

El punto es que si está contento con simulaciones a pequeña escala, las personas usan un idioma, pero cada vez que se trata de cálculos serios, tal vez paralelos, todos usan otra cosa. Es algo de la comunidad con seguridad, pero también con ser interoperable: si PETSc y Trilinos están escritos en C y C ++, entonces yo (siendo el autor del acuerdo. II) no puedo elegir fácilmente ningún otro idioma, incluso si quisiera porque Necesito trabajar con PETSc y Trilinos.


1
Para ser justos, hay muchos usuarios de PETSc que vienen de Fortran y muchos de Python. C es fácil de llamar desde casi cualquier lenguaje, aunque la programación de lenguaje mixto viene con su propio conjunto de desafíos y no lo recomiendo muy a menudo. El problema de dónde reside el código en la pila también se pasa por alto con demasiada frecuencia. Las aplicaciones de usuario final deben tomar diferentes decisiones de diseño de software que las bibliotecas de nivel de sistema, por ejemplo.
Jed Brown

Eso es justo. Sin embargo, es cierto que las instancias más recientes de software utilizado en computaciones a gran escala se escriben abrumadoramente en C y C ++ en estos días (a pesar de las antiguas reservas escritas en Fortran).
Wolfgang Bangerth 01 de

1

Para agregar mis dos centavos, he tenido experiencia académica reciente (un nuevo doctorado :)) y experiencia en la industria (un fabricante de equipos de topografía).

Hacemos muchos cálculos numéricos en procesadores integrados débiles (piense en los procesadores de teléfonos móviles). Además de que no hay MATLAB para ARM, C ++ es el rey en este mundo: ¡muchas compilaciones integradas no incluyen FORTAN!

Si bien tenemos un número limitado de licencias de MATLAB, el requisito de hacer que un producto consuma 2 vatios de potencia distorsiona nuestro trabajo de desarrollo a favor de C ++ (experimentando a un lado).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.