python - from - numpy vs matlab
¿Para qué sirve MATLAB? ¿Por qué es tan usado por las universidades? ¿Cuándo es mejor que Python? (21)
Adam solo está parcialmente en lo cierto. Muchos matemáticos, si no la mayoría, nunca lo tocarán. Si hay una herramienta informática utilizada, será algo así como Mathematica o Maple . Los departamentos de ingeniería, por otro lado, a menudo confían en él y definitivamente hay cosas útiles para algunos matemáticos aplicados. También se usa mucho en la industria en algunas áreas.
Algo que debes saber sobre MATLAB es que comenzó como un contenedor en las bibliotecas de Fortran para el álgebra lineal. Durante mucho tiempo, tuvo la actitud de que "todo el mundo es una serie de dobles (carrozas)". Como lenguaje, ha crecido de manera muy orgánica, y hay algunos defectos que están muy presentes, si lo ves solo como un lenguaje de programación.
Sin embargo, si lo ves como un entorno para realizar ciertos tipos de investigación, tiene algunas fortalezas reales. Es lo mejor que se puede hacer para hacer álgebra lineal en coma flotante. La notación es simple y poderosa, la implementación rápida y confiable. Es muy bueno generando tramas y otras tareas interactivas. Hay una gran cantidad de ''cajas de herramientas'' con buen código para tareas particulares, que son asequibles. Existe una gran comunidad de usuarios que comparten códigos numéricos (Python + NumPy no tiene nada en la misma liga, al menos todavía)
Python, verrugas y todo, es un lenguaje de programación mucho mejor (como muchos otros). Sin embargo, es una década atrás en términos de las herramientas.
El punto clave es que la mayoría de las personas que usan MATLAB no son realmente programadores, y no quieren serlo.
Es una mala elección para un lenguaje de programación general; es peculiar, lento para muchas tareas (necesita vectorizar cosas para obtener códigos eficientes) y no es fácil de integrar con el mundo exterior. Por otro lado, para las cosas en las que es bueno, es muy bueno. Muy pocas cosas se comparan. Hay una empresa con un apoyo razonable y quién sabe cuántos años-hombre aportan. Esto puede importar en la industria.
Mirando estrictamente su comparación Python vs MATLAB, en su mayoría son herramientas diferentes para diferentes trabajos. En las áreas donde se superponen un poco, es difícil decir cuál es la mejor ruta para seguir (depende mucho de lo que estás tratando de hacer). Pero, en su mayoría, Python no es tan bueno en las fortalezas centrales de MATLAB, y viceversa.
Hace poco me pidieron que aprendiera algunos conceptos básicos de MATLAB para una clase.
¿Qué hace que sea tan genial para los investigadores y las personas que trabajan en la universidad? Vi que es genial trabajar con matrices y trazar cosas ... (cosas que se pueden hacer fácilmente en Python utilizando algunas bibliotecas).
Escribir una función o analizar un archivo es doloroso. Todavía estoy en el comienzo, ¿qué me estoy perdiendo?
En el mundo "real", ¿para qué debería usarlo? ¿Cuándo debería hacerlo mejor que Python? Para mejor quiero decir: forma fácil de escribir algo que funcione.
ACTUALIZACIÓN 1: Una de las cosas que más me gustaría saber es "¿Me estoy perdiendo algo?" :RE
ACTUALIZACIÓN 2: Gracias por sus respuestas. Mi pregunta no es sobre comprar o no comprar MATLAB. La universidad tiene la posibilidad de darme una copia de una versión anterior de MATLAB (MATLAB 5 supongo) de forma gratuita, sin romper la licencia. Me interesan sus capacidades y si merece un estudio más profundo (no necesitaré nada más que MATLAB básico para aprobar el examen: P) será realmente mejor que Python para un tipo específico de tarea en la realidad. mundo.
Creo que respondiste tu propia pregunta cuando notaste que Matlab es "genial trabajar con matrices y planear cosas". Cualquier aplicación que requiera mucha matemática matricial y visualización probablemente sea más fácil de hacer en Matlab.
Dicho esto, la sintaxis de Matlab se siente incómoda y muestra la edad del idioma. En contraste, Python es un lenguaje de programación de propósito general mucho más agradable y, con las bibliotecas correctas, puede hacer mucho de lo que hace Matlab. Sin embargo, Matlab siempre tendrá una sintaxis más concisa que Python para la manipulación de vectores y matrices.
Si gran parte de su programación implica este tipo de manipulaciones, como en el procesamiento de señales y algunas técnicas estadísticas, entonces Matlab será una mejor opción.
Creo que tiene un buen punto y es uno que se ha planteado en la empresa donde trabajo. La compañía tiene una capacidad limitada para aplicar matlab debido a los costos de licencia involucrados. Un desarrollador demostró que Python era un reemplazo muy adecuado, pero cayó en oídos ignorantes porque para los dueños de esos oídos ...
- Nadie en la compañía conocía a Python, aunque muchos de nosotros queríamos usarlo.
- MatLab tiene un nombre, una empresa y un grupo de trabajo detrás para resolver cualquier problema.
- Hubo algunos (pero no muchos) proyectos heredados de MatLab que necesitarían ser reescritos.
Si vale £ 10,000 (??) ¡¡tiene que valer la pena !!
Estoy contigo aquí. Python es un muy buen reemplazo para MatLab.
Debo señalar que me han dicho que la empresa utiliza entre el 5% y el 10% de las capacidades de MatLabs y esa es la base de mi acuerdo con el póster original.
Entre matplotlib+pylab y NumPy , no creo que haya mucha diferencia real entre Matlab y python aparte de la inercia cultural, como sugiere @Adam Bellaire.
Ha pasado algún tiempo desde que utilicé Matlab, pero desde la memoria proporciona (aunque con complementos adicionales) la capacidad de generar código fuente para que pueda realizar su algoritmo en un DSP.
Como Python es un lenguaje de programación de propósito general, no hay ninguna razón por la que no puedas hacer todo en Python que puedas hacer en matlab. Sin embargo, matlab proporciona una cantidad de otras herramientas, por ej. una muy amplia gama de características dsp, una amplia gama de características de dominio S y Z.
Todo esto podría estar codificado a mano en python (ya que es un lenguaje de propósito general), pero si lo único que buscas son los resultados, ¿quizás gastar el dinero en Matlab es la opción más barata?
Estas características también se han ajustado para el rendimiento. p.ej. La documentación para Numpy especifica que su transformada de Fourier está optimizada para la potencia de conjuntos de datos de 2 puntos. Según tengo entendido, Matlab fue escrito para usar la transformada de Fourier más eficiente para adaptarse al tamaño del conjunto de datos, no solo a la potencia de 2.
edit: Ah, y en Matlab puedes producir algunas tramas sensacionales con mucha facilidad, lo cual es importante cuando presentas tus datos. Nuevamente, ciertamente no es imposible usar otras herramientas.
He estado usando matlab durante muchos años en mi investigación. Es excelente para el álgebra lineal y tiene un gran conjunto de cajas de herramientas bien escritas. Las versiones más recientes están empezando a acercarse más a un lenguaje de propósito general (mejores optimizadores, un modelo de objetos mucho mejor, reglas de alcance más amplias, etc.).
El verano pasado, tuve un trabajo donde utilicé Python + numpy en lugar de Matlab. Disfruté el cambio de ritmo. Es un lenguaje "real" (y todo lo que eso implica), y tiene algunas características numéricas geniales, como las matrices de transmisión. También me gusta mucho el entorno ipython.
Aquí hay algunas cosas que prefiero sobre Matlab:
- consistencia: MathWorks ha dedicado mucho esfuerzo para que las cajas de herramientas se vean y funcionen unas con otras. No han hecho un trabajo perfecto, pero es uno de los mejores que he visto para una base de código que tiene décadas de antigüedad.
- documentación: encuentro muy frustrante descubrir algunas cosas en numpy y / o python porque la calidad de la documentación es irregular: algunas cosas están documentadas muy bien, otras no. A menudo es más frustrante cuando veo cosas que parecen imitar a Matlab, pero no funcionan del todo. Poder capturar la fuente es invaluable (para ser justos, la mayoría de las cajas de herramientas de Matlab se envían también con la fuente)
- Compacidad: por lo que hago, la sintaxis de Matlab a menudo es más compacta (pero no siempre)
- impulso: tengo demasiado código de Matlab para cambiar ahora
Si no tuviera una base de código existente tan grande, consideraría seriamente cambiar a Python + numpy.
La mayoría de las respuestas no entienden el punto.
Hay UNA razón por la cual el matlab es tan bueno y ampliamente utilizado:
CODIFICACIÓN EXTREMADAMENTE RÁPIDA
Soy un estudiante de doctorado en visión por computadora y he estado usando matlab durante 4 años, antes de mi doctorado. Estaba usando diferentes idiomas, incluyendo C ++, Java, PHP, Python ... La mayoría de los investigadores de visión artificial están usando exclusivamente matlab.
1) Los investigadores necesitan una rápida creación de prototipos
En el ámbito de la investigación, tenemos (con suerte) nuevas ideas a menudo, y queremos probarlas rápidamente para ver si vale la pena seguir en esa dirección. Y a menudo solo una pequeña parte secundaria de lo que codificamos será útil.
Matlab suele ser más lento en el tiempo de ejecución , pero no nos importa mucho. Debido a que no sabemos de antemano qué método va a tener éxito, tenemos que probar muchas cosas, por lo que nuestro cuello de botella es el tiempo de programación , porque nuestro código generalmente se ejecutará varias veces para que los resultados se publiquen, y eso es todas.
Entonces veamos cómo puede ayudar matlab.
2) Todo lo que necesito ya está allí
Matlab tiene realmente muchas funciones que necesito, para que no tenga que reinventarlas todo el tiempo:
cambie el índice de una matriz por una coordenada 2d: ind2sub
extrae todos los parches de una imagen: im2col
; calcular un histograma de una imagen: hist(Im(:))
; encuentre los elementos únicos en una lista unique(list)
; agrega un vector a todos los vectores de una matriz bsxfun(@plus,M,V)
; convolución en arrays n-dimensionales, convn(A)
; calcule el tiempo de cálculo de una subparte del código: tic; %%code; toc
tic; %%code; toc
tic; %%code; toc
; interfaz gráfica para recortar una imagen: imcrop(im)
;
La lista puede ser muy larga ... Y son muy fáciles de encontrar mediante el uso de la ayuda.
Lo más cercano a eso es Python ... Pero es solo un dolor en python, tengo que ir a google cada vez para buscar el nombre de la función que necesito, y luego necesito agregar paquetes, y los paquetes no son compatibles uno con el otro, el formato del cambio de matriz, la función de convolución solo maneja el doble pero no comete un error cuando le doy char, solo da un resultado incorrecto ... no
3) IDE
Un ejemplo: lanzo un script. Produce un error debido a una matriz. Todavía puedo ejecutar código con la línea de comando. Lo visualizo haciendo: imagesc(matrix)
. Veo que la última línea de la matriz es extraña. Arreglé el error. Todas las variables todavía están establecidas . Selecciono el resto del código, presiono F9 para ejecutar la selección, y todo continúa. La depuración se hace rápida , gracias a eso.
Matlab subraya algunos de mis errores antes de la ejecución. Entonces puedo ver rápidamente los problemas. Propone alguna forma de hacer que mi código sea más rápido.
Hay un perfilador impresionante incluido en el IDE. KCahcegrind es tan doloroso de usar en comparación con eso.
Los IDEs de Python son asombrosos. Python sin ipython no es utilizable. Nunca logro depurar usando ipython.
+ autocompletado, ayuda para argumentos de funciones, ...
4) código conciso
Para normalizar todas las columnas de una matriz (que necesito todo el tiempo), hago: bsxfun(@times,A,1./sqrt(sum(A.^2)))
Para eliminar de una matriz todas las columnas con suma pequeña:
A(:,sum(A)<e)=[]
Para hacer el cálculo en la GPU :
gpuX = gpuarray(X);
%%% code normally and everything is done on GPU
Paralizar mi código:
parfor n=1:100
%%% code normally and everything is multi-threaded
¿Qué idioma puede vencer eso?
Y, por supuesto, rara vez necesito hacer bucles, todo está incluido en las funciones, lo que hace que el código sea más fácil de leer, y no hay dolor de cabeza con índices. Entonces puedo enfocarme en lo que quiero programar, no en cómo programarlo.
5) herramientas de trazado
Matlab es famoso por sus herramientas de trazado. Ellos son muy útiles.
Las herramientas de trazado de Python tienen muchas menos características. Pero hay una cosa súper molesta. ¿Puede trazar figuras solo una vez por guión? si tengo una secuencia de comandos a lo largo, no puedo mostrar cosas en cada paso ---> inútil.
6) Documentación
Todo es muy rápido de acceder, todo es claro como el cristal, los nombres de las funciones están bien elegidos. Con Python, siempre necesito googlear cosas, buscar en foros o .... completar el tiempo hog.
PD: Finalmente, lo que odio con matlab: su precio
La razón más probable por la que se usa tanto en las universidades es porque la facultad de matemáticas está acostumbrada, la entiende y sabe cómo incorporarla en su plan de estudios.
La razón principal por la que es útil en la industria es el uso de complementos en la parte superior de la funcionalidad principal. Casi todos los desarrollos activos de Matlab en los últimos años se han centrado en estos.
Desafortunadamente, no tendrás muchas oportunidades de usar estos en un ambiente académico.
MATLAB ERA un contenedor de bibliotecas comúnmente disponibles. Y en muchos casos todavía lo es. Cuando se llega a conjuntos de datos más grandes, tiene muchas optimizaciones adicionales, que incluyen el examen y problemas comunes de la envoltura especial (reduciendo a matrices dispersas, donde es útil, por ejemplo), y el manejo de casos extremos. A menudo, puede enviar un problema en una forma estándar a una función general, y determinará el mejor algoritmo subyacente para usar en base a sus datos. Para N pequeña, todos los algoritmos son rápidos, pero MATLAB hace que determinar el algoritmo óptimo no sea un problema.
Está escrito por alguien que odia MATLAB y ha tratado de reemplazarlo debido a problemas de integración. De su pregunta, menciona haber obtenido MATLAB 5 y usarlo para un curso. En ese nivel, es posible que desee ver Octave , una implementación de código abierto con la misma sintaxis. Supongo que ya está en los niveles de MATLAB 5 (solo juego con eso). Eso debería permitirle "aprobar su examen". Para la funcionalidad desnuda de MATLAB, parece estar cerca. Falta el soporte de la caja de herramientas (que, una vez más, sirve sobre todo para reformular las llamadas de función a formas familiares para los ingenieros en el campo y selecciona el algoritmo subyacente adecuado para usar).
MATLAB es ideal para hacer arreglos de arreglos, realizar funciones matemáticas especializadas y crear gráficas agradables de forma rápida.
Probablemente solo lo usaría para programas grandes si pudiera usar mucha manipulación de matriz / matriz.
No tiene que preocuparse por el IDE tanto como en paquetes más formales, por lo que es más fácil para los estudiantes sin mucha experiencia en programación.
MATLAB es una herramienta fantástica para
- creación de prototipos
- simulación de ingeniería y
- visualización rápida de datos
Realmente puedes jugar, visualizar y probar tus ideas en un conjunto de datos de manera muy efectiva. No debe considerarse como una alternativa a otros lenguajes de software utilizados para el desarrollo de productos. Lo recomiendo encarecidamente para las tareas anteriores, aunque es caro: las alternativas gratuitas como Octave y Python se están poniendo al día.
MATLAB es una pieza popular y ampliamente adaptada de un sofisticado paquete de software. Sería un error pensar que es simplemente un software matemático ya que tiene una amplia gama de "cajas de herramientas". Hace poco utilicé Matplotlib para trazar algunos datos de una base de datos e hizo el trabajo sin necesitar todos los detalles de MATLAB. Sin embargo, puede no ser adecuado comparar Python y MATLAB en cada situación. Como con todo lo demás, la decisión depende de lo que debe hacer.
Usé MATLAB en pregrado para el diseño y simulación de sistemas de control y también para el procesamiento de imágenes en la escuela de posgrado. Para estos campos, MATLAB tiene más sentido debido a las poderosas cajas de herramientas de control y procesamiento de imágenes. Como todo el mundo mencionó, las operaciones de matriz, que se usan en cada script de MATLAB que necesitarías escribir, son muy fáciles con MATLAB.
Otra cosa buena de MATLAB es que es muy fácil y rápido hacer prototipos y probar ideas usando las funciones integradas de la caja de herramientas. Por ejemplo, no requiere esfuerzo importar una imagen y calcular su histograma o hacer un procesamiento simple en él. Una desventaja de MATLAB podría ser su velocidad debido a su naturaleza interpretada. Sin embargo, si uno realmente necesita velocidad, puede elegir implementar la lógica probada en C / C ++, etc.
Para una mayor comparación con Python, puedo decir que MATLAB proporciona un paquete completo para que pueda hacer su trabajo sin la necesidad de buscar bibliotecas externas e implementar funciones adicionales.
Un último punto sobre MATLAB que veo que no se menciona en las respuestas aquí es que tiene un entorno de simulación / modelado visual muy poderoso llamado Simulink . Es más fácil diseñar y simular sistemas más grandes con Simulink.
Finalmente, nuevamente, todo depende del problema que necesita resolver. Si su dominio problemático puede hacer uso de una de las cajas de herramientas de MATLAB y tiene acceso a MATLAB, entonces puede estar seguro de que tendrá la herramienta adecuada para resolverlo.
MATLAB, como lo mencionaron otros, es excelente en la manipulación de matrices, y se construyó originalmente como una extensión de las bien conocidas bibliotecas BLAS y LAPACK utilizadas para el álgebra lineal. Se conecta bien con otros lenguajes como Java, y es bien favorecido por las compañías de ingeniería y científicas por sus bibliotecas bien desarrolladas y documentadas. Por lo que sé de Python y NumPy, mientras comparten muchas de las capacidades fundamentales de MATLAB, no tienen la amplitud completa y la profundidad de las capacidades con sus bibliotecas.
Personalmente, utilizo MATLAB porque eso es lo que aprendí en mi pasantía, eso es lo que usé en la escuela de posgrado, y eso es lo que utilicé en mi primer trabajo. No tengo nada en contra de Python (o cualquier otro idioma). Es solo lo que yo también uso.
Además, hay otra versión gratuita además de scilab mencionada por @Jim C de gnu llamada Octave .
Mantener todo ¿Cuándo fue la última vez que programó su calculadora para jugar tetris? ¿De verdad pensaste que podrías escribir lo que quieras en esos 128k de RAM? Probablemente no. MATLAB no es para programación a menos que estés lidiando con matrices enormes. Es la calculadora gráfica que lanzas cuando tienes Megabytes a Gigabytes de datos para crear y / o trazar. Aprende solo cosas básicas, pero tampoco te mates tratando de hacer que Python sea una calculadora gráfica.
Rápidamente tendrá una idea de cuándo quiere contraer, planificar o explorar en MATLAB y cuándo quiere tener todo lo que Python ofrece. Muchos ingenieros recurren al procesamiento previo y posterior en Python o Perl. Ocasionalmente, incluso llamando a MATLAB por los bits duros.
Son herramientas tan diferentes que primero debes aprender sus fortalezas básicas sin intentar reemplazar una con la otra. Concedido por ahorrar dinero, usaría Octave o escatimaré con facilidad y aprenderé a trabajar con matrices dispersas en Perl o Python.
Matlab es bueno para hacer números crujientes. También Matriz y manipulación matricial. Tiene muchas bibliotecas útiles (depende de la versión) Creo que es más fácil de usar que Python si va a calcular ecuaciones.
Parece ser pura inercia. Donde está en uso, todos están demasiado ocupados para aprender IDL o numpy con suficiente detalle para cambiar, y no quieren reescribir buenos programas de trabajo. Afortunadamente, eso no es estrictamente cierto, pero es suficiente en lugares suficientes que Matlab durará mucho tiempo. Como Fortran (¡en uso activo donde trabajo!)
Personalmente, tiendo a pensar en Matlab como una calculadora matricial interactiva y una herramienta de trazado con algunas capacidades de scripting, en lugar de un lenguaje de programación completo como Python o C. El motivo de su éxito es que las cosas de la matriz y el trazado funcionan a partir de la caja, y puedes hacer algunas cosas muy específicas sin virtualmente conocimiento de programación. El lenguaje es, como usted señala, extremadamente frustrante de usar para tareas más generales, como el procesamiento de cadenas más simple. Su sintaxis es peculiar, y no fue creada con las abstracciones necesarias para proyectos de más de 100 líneas en mente.
Creo que la razón por la que las personas intentan utilizar Matlab como un lenguaje de programación serio es que la mayoría de los ingenieros (hay excepciones, mi título es en ingeniería biomédica y me gusta la programación) son programadores horribles y odian programar. A Matlab en la universidad se les enseña principalmente matemáticas matriciales, y aprenden algo de programación rudimentaria como parte del aprendizaje de Matlab, y simplemente asumen que Matlab es lo suficientemente bueno. No puedo pensar en alguien que conozca que conozca otro idioma además de Matlab, pero todavía usa Matlab para cualquier cosa que no sean unas pocas aplicaciones de procesamiento de números puros.
Sé que esta pregunta es antigua y, por lo tanto, es posible que ya no se mire, pero sentí que era necesario hacer un comentario. Como ingeniero aeroespacial en Georgia Tech, puedo decir, sin reparos, que MATLAB es increíble. Puede hacer que interactúe rápidamente con sus hojas de cálculo de Excel para obtener datos sobre cómo vuelan los cohetes altos y rápidos, cómo afecta el viento a esos mismos cohetes y cómo importan los diferentes motores. Más allá de la cohetería, conceptos similares entran en juego para automóviles, camiones, aviones, naves espaciales e incluso atletismo. Puede obtener grandes cantidades de datos, manipularlos por completo y asegurarse de que sus resultados sean los adecuados. En caso de que algo no funcione, puede agregar un salto de línea donde se produce un error para depurar su programa sin tener que volver a compilar cada vez que desee ejecutar su programa. ¿Es más lento que otros programas? Bueno, técnicamente. Estoy seguro de que si quieres hacer el cálculo numérico es genial para un procesador de gráficos NVIDIA, probablemente sea más rápido, pero requiere mucho más esfuerzo con una depuración más difícil.
Como lenguaje de programación general, MATLAB es débil. No está diseñado para funcionar en Python, Java, ActionScript, C / C ++ o cualquier otro lenguaje de uso general. Está destinado para el nicho de ingeniería y matemática que el nombre implica, y lo hace de manera fantástica.
Una razón por la cual MATLAB es popular entre las universidades es la misma razón por la que muchas cosas son populares entre las universidades: hay muchos profesores familiarizados con ella y es bastante sólida.
He hablado con mucha gente que está especialmente interesada en la incipiente capacidad de MATLAB para acceder a la GPU en lugar de trabajar en serie. Después de haber usado Python en la escuela de posgrado, me gustaría tener la suerte de trabajar con MATLAB en ese caso. Seguramente haría que los cálculos del espacio vectorial fueran sencillos.
Primera ventaja de Mover Matlab ha estado presente desde finales de los años setenta. Python apareció más recientemente, y las bibliotecas que lo hacen adecuado para las tareas de tipo Matlab llegaron incluso más recientemente. La gente está acostumbrada a Matlab, así que lo usan.