¿Para qué sirve MATLAB? ¿Por qué es tan utilizado por las universidades? ¿Cuándo es mejor que Python? [cerrado]

StackOverflow https://stackoverflow.com/questions/179904

  •  05-07-2019
  •  | 
  •  

Pregunta

Recientemente me han pedido que aprenda algunos conceptos básicos de MATLAB para una clase.

¿Qué lo hace 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 usando algunas bibliotecas).

Escribir una función o analizar un archivo es simplemente doloroso. Todavía estoy al principio, ¿qué me estoy perdiendo?

En el " real " mundo, ¿para qué debería pensar 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? " : D

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. Estoy interesado en sus capacidades y si merece un estudio más profundo (no necesitaré nada más que básico MATLAB para aprobar el examen: P) será realmente mejor que Python para un tipo específico de tarea en el mundo real.

¿Fue útil?

Solución

Adam solo tiene razón en parte. Muchos, si no la mayoría, los matemáticos nunca lo tocarán. Si se usa alguna herramienta informática, será algo 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 debe tener en cuenta acerca de MATLAB es que comenzó como un contenedor en las bibliotecas Fortran para álgebra lineal. Durante mucho tiempo, tuvo una actitud que & "; Todo el mundo es un conjunto de dobles (flotadores) &"; Como lenguaje, ha crecido de manera muy orgánica, y hay algunos defectos que están muy arraigados, si lo miras solo como un lenguaje de programación.

Sin embargo, si lo ves como un entorno para hacer ciertos tipos de investigación, tiene algunas fortalezas reales. Es casi tan bueno como lo es para hacer álgebra lineal de coma flotante. La notación es simple y poderosa, la implementación es rápida y confiable. Es muy bueno para generar tramas y otras tareas interactivas. Hay una gran cantidad de 'cajas de herramientas' con buen código para tareas particulares, que son asequibles. Hay 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 lo son muchos otros). Sin embargo, lleva una década más o menos en términos de 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 pésima elección para un lenguaje de programación general; es peculiar, lento para muchas tareas (necesita vectorizar las 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, muy bueno. Muy pocas cosas se comparan. Hay una compañía con un apoyo razonable y quién sabe cuántos años-hombre le dedicaron. Esto puede importar en la industria.

Mirando estrictamente su comparación de 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 (depende mucho de lo que intente hacer). Pero sobre todo Python no es tan bueno en las fortalezas centrales de MATLAB, y viceversa.

Otros consejos

La mayoría de las respuestas no entienden el punto.

Hay UNA razón por la que matlab es tan bueno y tan ampliamente utilizado:

CODIFICACIÓN EXTREMADAMENTE RÁPIDA

Soy un estudiante de doctorado en visión artificial y he estado usando matlab durante 4 años, antes de mi doctorado estaba usando diferentes lenguajes, incluidos C ++, java, php, python ... La mayoría de los investigadores de visión artificial usan exclusivamente matlab.

1) Los investigadores necesitan prototipos rápidos

En el entorno de la investigación, tenemos (con suerte) ideas nuevas a menudo, y queremos probarlas muy rápido para ver si vale la pena seguir en esa dirección. Y a menudo solo una pequeña subparte de lo que codificamos será útil.

Matlab es a menudo más lento en el tiempo de ejecución , pero no nos importa mucho. Debido a que no sabemos de antemano qué método será exitoso, tenemos que probar muchas cosas, por lo que nuestro cuello de botella es tiempo de programación , porque nuestro código se ejecutará algunas veces para obtener los resultados para publicar, y eso es todo.

Entonces, veamos cómo puede ayudar matlab.

2) Todo lo que necesito ya está allí

Matlab tiene muchas funciones que necesito, por lo que no tengo que reinventarlas todo el tiempo:

cambia el índice de una matriz a 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); agregue un vector a todos los vectores de una matriz bsxfun(@plus,M,V); convolución en matrices n-dimensionales convn(A); calcule el tiempo de cálculo de una subparte del código: tic; %%code; toc; interfaz gráfica para recortar una imagen: imcrop(im);

La lista podría ser muy larga ... Y son muy fáciles de encontrar utilizando 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 entre sí, el formato del cambio de matriz, la función de convolución solo maneja los dobles pero no comete un error cuando le doy char, solo da una salida incorrecta ... 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. Arreglo el error. Todas las variables todavía están configuradas . Selecciono el resto del código, presiono F9 para ejecutar la selección, y todo continúa. La depuración se vuelve 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 acelerar mi código.

Hay un increíble generador de perfiles incluido en el IDE. KCahcegrind es tan difícil de usar en comparación con eso.

Los IDE de

python son espantosos. Python sin ipython no es utilizable. Nunca logro depurar, usando ipython.

+ autocompletado, ayuda para argumentos de función, ...

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 una 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 superar 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 los índices. Entonces puedo concentrarme en lo que quiero programar, no en cómo programarlo.

5) Herramientas de trazado

Matlab es famoso por sus herramientas de trazado. Son muy útiles.

Las herramientas de trazado de Python tienen muchas menos características. Pero hay una cosa súper molesta. ¿Puedes trazar figuras solo una vez por script? si tengo un script largo, no puedo mostrar cosas en cada paso --- > inútil.

6) Documentación

Todo es de acceso muy rápido, todo es muy claro,los nombres de funciones están bien elegidos. Con Python, siempre necesito buscar cosas en Google, buscar en foros o stackoverflow ... completar el tiempo.

PD: Finalmente, lo que odio con matlab: su precio

He estado usando matlab durante muchos años en mi investigación. Es ideal para álgebra lineal y tiene un gran conjunto de cajas de herramientas bien escritas. Las versiones más recientes están comenzando a impulsarlo a acercarse a un lenguaje de propósito general (mejores optimizadores, un modelo de objeto mucho mejor, reglas de alcance más completas, etc.).

El verano pasado, tuve un trabajo donde usé Python + numpy en lugar de Matlab. Disfruté el cambio de ritmo. Es un & Quot; real & Quot; lenguaje (y todo lo que conlleva), y tiene algunas características numéricas excelentes, como la transmisión de matrices. También me gusta mucho el entorno ipython.

Aquí hay algunas cosas que prefiero sobre Matlab:

  • consistencia: MathWorks ha dedicado un gran esfuerzo a hacer que las cajas de herramientas se vean y funcionen entre sí. 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: me resulta muy frustrante descubrir algunas cosas en numpy y / o python porque la calidad de la documentación es irregular: algunas cosas están muy bien documentadas, otras no . A menudo es más frustrante cuando veo cosas que parecen imitar a Matlab, pero no funcionan igual. Ser capaz de tomar la fuente es invaluable (para ser justos, la mayoría de las cajas de herramientas de Matlab también se envían con la fuente)
  • compacidad: por lo que hago, la sintaxis de Matlab es a menudo 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.

Sostenga todo. ¿Cuándo fue la última vez que programó su calculadora para jugar tetris? ¿Realmente pensaste que podrías escribir lo que quieras en esos 128k de RAM? Probablemente no. MATLAB no es para programación a menos que se trate de matrices enormes. Es la calculadora gráfica que saca cuando tiene Megabytes a Gigabytes de datos para procesar y / o trazar. Aprende solo cosas básicas, pero tampoco te mates tratando de hacer que Python sea una calculadora gráfica.

Tendrás una idea rápida de cuándo quieres analizar, trazar o explorar en MATLAB y cuándo quieres tener todo lo que ofrece Python. Muchos ingenieros recurren al procesamiento previo y posterior en Python o Perl. Ocasionalmente, incluso llamando a MATLAB por los bits duros.

Son herramientas tan completamente diferentes que primero debes aprender sus fortalezas básicas sin intentar reemplazar una por la otra. Concedido para ahorrar dinero, usaría Octave o escatimaré fácilmente y aprendería a trabajar con matrices dispersas en Perl o Python.

MATLAB es ideal para manipular matrices, realizar funciones matemáticas especializadas y para crear gráficas agradables rápidamente.

Probablemente solo lo usaría para programas grandes si pudiera usar mucha manipulación de matriz / matriz.

No tiene que preocuparse tanto por el IDE como en los paquetes más formales, por lo que es más fácil para los estudiantes sin mucha experiencia en programación.

MATLAB es una pieza popular y ampliamente adaptada de un paquete de software sofisticado Sería un error pensar es simplemente un software matemático ya que tiene una amplia gama de " cajas de herramientas " ;. Recientemente utilicé Matplotlib para trazar algunos datos de una base de datos e hizo el trabajo sin necesitar todo el campanas y silbatos de MATLAB. Sin embargo, puede no ser apropiado comparar Python y MATLAB en cada situación. Al igual que con todo lo demás depende de lo que deba hacer.

Usé MATLAB en pregrado para el diseño de sistemas de control y simulación y también para procesamiento de imágenes en la escuela de posgrado. por estos campos MATLAB tiene más sentido debido a la potentes cajas de herramientas de control y procesamiento de imágenes. Como todos mencionado, operaciones de matriz, que se utilizan en cada MATLAB script que necesitarías escribir, son muy fáciles con MATLAB.

Otra cosa buena de MATLAB es que es muy fácil y rápido para hacer prototipos y probar ideas usando el construido en funciones de caja de herramientas. Por ejemplo, no hace falta esfuerzo para importar una imagen y calcular su histograma o hacer algo simple procesamiento en él. Una desventaja de MATLAB podría ser que es velocidad debido a su naturaleza interpretada. Sin embargo, si uno realmente necesita velocidad de la que puede elegir para implementar el 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 el necesidad de buscar bibliotecas externas y implementando funciones adicionales.

Un último punto sobre MATLAB que veo no se menciona en la respuesta aquí es que tiene una visual muy poderosa entorno de modelado / simulación llamado Simulink . Sus más fácil de diseñar y simular sistemas más grandes con Simulink.

Finalmente, nuevamente, todo depende del problema que necesite resolver. Si su dominio problemático puede hacer uso de uno de Las cajas de herramientas de MATLAB y usted tiene acceso a MATLAB y luego puede estar seguro de que tendrá la herramienta adecuada para resolverlo.

MATLAB, como lo mencionaron otros, es excelente para la manipulación de matrices, y fue originalmente construido como una extensión del conocido BLAS y LAPACK bibliotecas utilizadas para álgebra lineal. Se comunica 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, aunque comparten muchas de las capacidades fundamentales de MATLAB, no tienen la amplitud y profundidad completas de sus bibliotecas.

Personalmente, uso 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 usé en mi primer trabajo. No tengo nada en contra de Python (o cualquier otro idioma). Es justo lo que yo también uso.

Además, hay otra versión gratuita además de scilab mencionada por @ Jim C de gnu llamado Octava .

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. La razón de su éxito es ese material de matriz y trazado funciona fuera de la caja, y puede hacer algunas cosas muy específicas sin prácticamente ningún conocimiento de programación real. Como usted señala, el lenguaje es extremadamente frustrante de usar para tareas más generales, como incluso el procesamiento de cadenas más simple. Su sintaxis es peculiar, y no se creó con las abstracciones necesarias para proyectos de más de 100 líneas más o menos en mente.

Creo que la razón por la cual la gente trata de usar 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 odio programar. Se les enseña Matlab en la universidad principalmente para las matemáticas de matriz, y aprenden algunos programas rudimentarios como parte del aprendizaje de Matlab, y simplemente asumen que Matlab es lo suficientemente bueno. No puedo pensar en nadie que conozca que sepa otro idioma además de Matlab, pero aún usa Matlab para algo más que unas pocas aplicaciones de cálculo de números.

La razón más probable por la que se usa tanto en las universidades es que los profesores de matemáticas están acostumbrados, entienden y saben cómo incorporarlo a su plan de estudios.

Entre matplotlib + pylab y NumPy No creo que haya mucha diferencia real entre Matlab y Python además de la inercia cultural como lo sugiere @Adam Bellaire.

Creo que tienes un muy 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 a los propietarios de esos oídos ...

  1. Nadie en la compañía conocía Python, aunque muchos de nosotros queríamos usarlo.
  2. MatLab tiene un nombre, una compañía y un grupo de trabajo detrás para resolver cualquier problema.
  3. Hubo algunos (pero no muchos) proyectos heredados de MatLab que necesitarían ser reescritos.

¡Si vale la pena & # 163; 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 compañía usa entre el 5% y el 10% de las capacidades de MatLabs y esa es la base de mi acuerdo con el póster original

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 costoso: alternativas gratuitas como Octave y Python son ponerse al día.

Parece ser pura inercia. Donde está en uso, todos están demasiado ocupados para aprender IDL o con muchos detalles suficientes para cambiar, y no quieren reescribir buenos programas de trabajo. Afortunadamente, eso no es estrictamente cierto, pero es lo suficientemente cierto en lugares suficientes como para que Matlab esté presente por mucho tiempo. Como Fortran (¡en uso activo donde trabajo!)

La razón principal por la que es útil en la industria son los complementos integrados sobre la funcionalidad principal. Casi todo el desarrollo activo de Matlab en los últimos años se ha centrado en estos.

Desafortunadamente, no tendrá muchas oportunidades de usarlos en un entorno académico.

Sé que esta pregunta es antigua y, por lo tanto, ya no puede ser Observé, pero sentí que era necesario comentar. Como un ingeniero aeroespacial en Georgia Tech, puedo decir, sin reparos, que MATLAB es increíble. Puedes tenerlo rápidamente interactúe con sus hojas de cálculo de Excel para obtener datos sobre qué tan alto y rápido están volando los cohetes, cómo afecta el viento esos mismos cohetes y cómo importan los diferentes motores. Más allá cohetes, entran en juego conceptos similares para automóviles, camiones, aviones, naves espaciales e incluso atletismo. Puedes jalar grandes cantidades de datos, manipúlelos todos y asegúrese de Sus resultados son como deberían ser. En el caso de que algo sea apagado, puede agregar un salto de línea donde se produce un error para depurar tu programa sin tener que volver a compilar cada vez que quieras para ejecutar tu programa. ¿Es más lento que algunos otros programas? Bueno, técnicamente. Estoy seguro de que si quieres hacer el número es genial para un procesador de gráficos NVIDIA, probablemente sería más rápido, pero requiere mucho más esfuerzo con depuración más difícil.

Como lenguaje de programación general, MATLAB es débil. No es destinado a trabajar contra Python, Java, ActionScript, C / C ++ o cualquier otro lenguaje de uso general. Es para el nicho de ingeniería y matemáticas que el nombre implica, y lo hace fantásticamente.

MATLAB FUE un contenedor alrededor de las bibliotecas comúnmente disponibles. Y en muchos casos todavía lo es. Cuando llegas a más grande conjuntos de datos, tiene muchas optimizaciones adicionales, incluidas examinar y problemas especiales de la carcasa especial (reduciendo a matrices dispersas donde sea útil, por ejemplo), y manejo casos de borde. A menudo, puede enviar un problema en un estándar formar una función general, y determinará la mejor algoritmo subyacente para utilizar en función de sus datos. Para pequeños N, todos los algoritmos son rápidos, pero MATLAB determina la algoritmo óptimo no es un problema.

Esto está escrito por alguien que odia MATLAB y ha intentado para reemplazarlo debido a problemas de integración. De tu pregunta, usted menciona obtener MATLAB 5 y usarlo para un curso. En ese nivel, es posible que desee mirar Octave , una implementación de código abierto con el mismo sintaxis. Supongo que ya está hasta los niveles de MATLAB 5 (yo solo juega con eso). Eso debería permitirle & Quot; pasar su examen " ;. Para la funcionalidad MATLAB desnuda, parece ser cerca. Falta el soporte de la caja de herramientas (que, de nuevo, sirve principalmente para reformular las llamadas de función a formularios familiar a los ingenieros en el campo y selecciona la correcta algoritmo subyacente a utilizar).

Una de las razones por las que 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 él, y es bastante robusto.

He hablado con muchas personas que están especialmente interesadas en la capacidad naciente de MATLAB de aprovechar la GPU en lugar de trabajar en serie. Después de haber usado Python en la escuela de posgrado, desearía tener el gusto de trabajar con MATLAB en ese caso. Seguro que facilitaría los cálculos de espacio vectorial.

Ha pasado algún tiempo desde que usé Matlab, pero desde la memoria proporciona (aunque con complementos adicionales) la capacidad de generar una fuente que le permita realizar su algoritmo en un DSP.

Dado que python es un lenguaje de programación de propósito general, no hay ninguna razón por la que no pueda hacer todo lo que puede hacer en python en matlab. Sin embargo, matlab proporciona una serie de otras herramientas, por ejemplo. una amplia gama de características de dsp, una amplia gama de características de dominio S y Z.

Todo esto podría codificarse a mano en Python (ya que es un lenguaje de propósito general), pero si lo único que busca son los resultados, ¿quizás gastar el dinero en Matlab sea 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 transformación de Fourier está optimizada para la potencia de los conjuntos de datos de 2 puntos. Según tengo entendido, Matlab ha sido escrito para usar la transformación de Fourier más eficiente para adaptarse al tamaño del conjunto de datos, no solo a la potencia de 2.

editar: Ah, y en Matlab puede producir algunas tramas sensacionales de aspecto con mucha facilidad, lo cual es importante cuando presenta sus datos. Nuevamente, ciertamente no es imposible usar otras herramientas.

Creo que respondió su propia pregunta cuando notó que Matlab es & "; genial para trabajar con matrices y trazar cosas &" ;. Cualquier aplicación que requiera muchas matemáticas y visualización de matrices 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 adecuadas, 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 involucra este tipo de manipulaciones, como en el procesamiento de señales y algunas técnicas estadísticas, entonces Matlab será una mejor opción.

First Mover Advantage . Matlab ha existido desde finales de los años setenta. Python apareció más recientemente, y las bibliotecas que lo hacen adecuado para tareas de tipo Matlab aparecieron aún más recientemente. Las personas están acostumbradas a Matlab, por lo que lo usan.

Matlab es bueno haciendo cálculos numéricos. También matriz y manipulación matricial. Tiene muchas bibliotecas integradas útiles (depende de qué versión) Creo que es más fácil de usar que python si va a calcular ecuaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top