A quoi sert MATLAB? Pourquoi est-il si utilisé par les universités? Quand est-ce mieux que Python?



Answers

La plupart des réponses n'obtiennent pas le point.

Il y a UNE raison pour laquelle matlab est si bon et si largement utilisé:

CODAGE EXTRÊMEMENT RAPIDE

Je suis un étudiant en phD en vision par ordinateur et j'utilise matlab depuis 4 ans, avant d'utiliser mon doctorat en différents langages dont C ++, java, php, python ... La plupart des chercheurs en vision par ordinateur utilisent exclusivement matlab.

1) Les chercheurs ont besoin d'un prototypage rapide

Dans le milieu de la recherche, nous avons (nous l'espérons) souvent de nouvelles idées, et nous voulons les tester très rapidement pour voir si cela vaut la peine de continuer dans cette direction. Et le plus souvent, seule une infime partie de ce que nous codons sera utile.

Matlab est souvent plus lent à l'exécution , mais on s'en fout. Parce que nous ne savons pas à l'avance quelle méthode va réussir, nous devons essayer beaucoup de choses, donc notre cou de bouteille est temps de programmation , parce que notre code fonctionnera le plus souvent plusieurs fois pour obtenir les résultats à publier, et c'est tout.

Voyons donc comment matlab peut vous aider.

2) Tout ce dont j'ai besoin est déjà là

Matlab a vraiment beaucoup de fonctions dont j'ai besoin, pour ne pas avoir à les réinventer tout le temps:

change l'index d'une matrice en coordonnée 2d: ind2sub extrait tous les patches d'une image: im2col ; calculer un histogramme d'une image: hist(Im(:)) ; trouver les éléments uniques dans une liste unique(list) ; ajouter un vecteur à tous les vecteurs d'une matrice bsxfun(@plus,M,V) ; convolution sur des réseaux de dimension n convn(A) ; calculer le temps de calcul d'une sous-partie du code: tic; %%code; toc tic; %%code; toc tic; %%code; toc ; interface graphique pour recadrer une image: imcrop(im) ;

La liste pourrait être très longue ... Et ils sont très faciles à trouver en utilisant l'aide.

Le plus proche de cela est python ... Mais c'est juste une douleur en python, je dois aller google chaque fois pour chercher le nom de la fonction dont j'ai besoin, et puis j'ai besoin d'ajouter des paquets, et les paquets ne sont pas compatibles l'un avec l'autre, le format de la matrice change, la fonction convolution ne gère que les doubles mais ne fait pas d'erreur quand je lui donne char, donne juste une mauvaise sortie ... non

3) IDE

Un exemple: je lance un script. Cela produit une erreur à cause d'une matrice. Je peux toujours exécuter du code avec la ligne de commande. Je le visualise en faisant: imagesc(matrix) . Je vois que la dernière ligne de la matrice est bizarre. Je corrige le bug. Toutes les variables sont encore définies . Je sélectionne le reste du code, appuyez sur F9 pour exécuter la sélection, et tout continue. Le débogage devient rapide , grâce à cela.

Matlab souligne certaines de mes erreurs avant l'exécution. Je peux donc rapidement voir les problèmes. Il propose un moyen de rendre mon code plus rapide.

Il y a un profileur génial inclus dans l'EDI. KCahcegrind est une telle douleur à utiliser par rapport à cela.

Les IDE de python sont incroyables. Python sans ipython n'est pas utilisable. Je n'arrive jamais à déboguer, en utilisant ipython.

+ auto-complétion, aide pour les arguments de fonction, ...

4) Code concis

Pour normaliser toutes les colonnes d'une matrice (dont j'ai besoin tout le temps), je fais: bsxfun(@times,A,1./sqrt(sum(A.^2)))

Pour supprimer d'une matrice toutes les colonnes avec une petite somme:

A(:,sum(A)<e)=[]

Pour faire le calcul sur le GPU :

gpuX = gpuarray(X); 
%%% code normally and everything is done on GPU

Pour paralyser mon code:

parfor n=1:100
%%% code normally and everything is multi-threaded

Quelle langue peut battre ça?

Et bien sûr, j'ai rarement besoin de faire des boucles, tout est inclus dans les fonctions, ce qui rend le code plus facile à lire, et pas de mal de tête avec des index. Je peux donc me concentrer sur ce que je veux programmer, pas sur la programmation.

5) Outils de traçage

Matlab est célèbre pour ses outils de traçage. Ils sont très utiles.

Les outils de traçage de Python ont beaucoup moins de fonctionnalités. Mais il y a une chose super agaçante. Vous pouvez tracer des figures seulement une fois par script ??? si j'ai le script, je ne peux pas afficher des trucs à chaque étape ---> inutile.

6) Documentation

Tout est très facile d'accès, tout est limpide, les noms de fonctions sont bien choisis. Avec python, j'ai toujours besoin de google stuff, regarder dans les forums ou stackoverflow .... temps complet hog.

PS: Enfin, ce que je déteste avec matlab: son prix

Question

On m'a récemment demandé d'apprendre quelques bases de MATLAB pour une classe.

Qu'est-ce qui rend si cool pour les chercheurs et les gens qui travaillent à l'université? J'ai vu que c'est cool de travailler avec des matrices et de tracer des choses ... (choses qui peuvent être faites facilement en Python en utilisant des bibliothèques).

Écrire une fonction ou analyser un fichier est douloureux. Je suis toujours au départ, qu'est-ce qui me manque?

Dans le monde "réel", que devrais-je penser pour l'utiliser? Quand devrait-il faire mieux que Python? Pour le mieux, je veux dire: moyen facile d'écrire quelque chose de performant.

MISE À JOUR 1: Une des choses que j'aimerais savoir le plus est: «Est-ce que je manque quelque chose? :RÉ

MISE À JOUR 2: Merci pour vos réponses. Ma question n'est pas d'acheter ou de ne pas acheter MATLAB. L'université a la possibilité de me donner une copie d'une ancienne version de MATLAB (MATLAB 5 je suppose) gratuitement, sans casser la licence. Je suis intéressé par ses capacités et si elle mérite une étude plus approfondie (je n'aurai besoin de rien de plus que MATLAB de base pour passer l'examen: P) ce sera vraiment mieux que Python pour un type spécifique de tâche dans le réel monde.




Personnellement, j'ai tendance à penser que Matlab est une calculatrice matricielle interactive et un outil de traçage avec quelques capacités de script, plutôt que comme un langage de programmation à part entière comme Python ou C. La raison de son succès est cette matrice la boîte, et vous pouvez faire quelques choses très spécifiques avec pratiquement aucune connaissance de la programmation. Le langage est, comme vous le soulignez, extrêmement frustrant à utiliser pour des tâches plus générales, comme le traitement de chaîne le plus simple. Sa syntaxe est bizarre, et il n'a pas été créé avec les abstractions nécessaires pour des projets de plus de 100 lignes ou plus en tête.

Je pense que la raison pour laquelle les gens essaient d'utiliser Matlab comme langage de programmation sérieux est que la plupart des ingénieurs (il y a des exceptions, mon diplôme en génie biomédical et j'aime la programmation) sont d'horribles programmeurs et déteste programmer. Ils apprennent Matlab à l'université principalement pour les mathématiques matricielles, et ils apprennent une programmation rudimentaire dans le cadre de l'apprentissage de Matlab, et supposent simplement que Matlab est assez bon. Je ne peux pas penser à quelqu'un que je connais qui connaît une langue autre que Matlab, mais utilise toujours Matlab pour autre chose que quelques applications de calcul de nombres purs.




La principale raison pour laquelle il est utile dans l'industrie est les plug-ins construits en plus des fonctionnalités de base. Presque tout le développement actif de Matlab au cours des dernières années a porté sur ces derniers.

Malheureusement, vous n'aurez pas beaucoup d'occasions de les utiliser dans un environnement universitaire.




MATLAB est une pièce populaire et largement adaptée d'un progiciel sophistiqué. Ce serait une erreur de penser que c'est simplement un logiciel de maths puisqu'il dispose d'une large gamme de "boîtes à outils". J'ai récemment utilisé Matplotlib pour tracer des données à partir d'une base de données et il a fait le travail sans avoir besoin de toutes les cloches et les sifflets de MATLAB. Cependant, il peut ne pas être approprié de comparer Python et MATLAB dans chaque situation. Comme avec tout le reste, la décision dépend de ce que vous devez faire.

J'ai utilisé MATLAB en licence pour la conception et la simulation de systèmes de contrôle, ainsi que pour le traitement d'images dans les écoles supérieures. Pour ces domaines MATLAB est le plus logique en raison des puissantes boîtes à outils de contrôle et de traitement d'image. Comme tout le monde l'a mentionné, les opérations de tableau, qui sont utilisées dans tous les scripts MATLAB que vous devez écrire, sont très simples avec MATLAB.

Une autre bonne chose à propos de MATLAB est qu'il est très facile et rapide de faire du prototypage et d'essayer des idées en utilisant les fonctions intégrées de la boîte à outils. Par exemple, il ne prend aucun effort pour importer une image et calculer son histogramme ou effectuer un traitement simple. Un inconvénient de MATLAB pourrait être sa rapidité à cause de sa nature interprétée. Cependant, si l'on a vraiment besoin de vitesse, il peut choisir d'implémenter la logique testée en C / C ++, etc.

Pour une comparaison plus poussée avec Python, je peux dire que MATLAB fournit un paquet complet pour que vous puissiez faire votre travail sans avoir besoin de chercher des bibliothèques externes et d'implémenter des fonctions supplémentaires.

Un dernier point à propos de MATLAB que je vois n'est pas mentionné dans les réponses ici est qu'il a un très puissant environnement de modélisation / simulation visuelle appelé Simulink . Il est plus facile de concevoir et de simuler des systèmes plus importants avec Simulink.

Enfin, encore une fois, tout dépend du problème que vous devez résoudre. Si votre domaine de problème peut utiliser l'une des boîtes à outils de MATLAB et que vous avez accès à MATLAB, vous pouvez être sûr que vous aurez le bon outil pour le résoudre.




Entre matplotlib+pylab et NumPy je ne pense pas qu'il y ait beaucoup de différences entre Matlab et python autres que l'inertie culturelle comme le suggère @Adam Bellaire.




Premier avantage Mover . Matlab existe depuis la fin des années 1970. Python est arrivé plus récemment, et les bibliothèques qui le rendent adapté aux tâches de type Matlab sont apparues encore plus récemment. Les gens sont habitués à Matlab, alors ils l'utilisent.




MATLAB était un wrapper autour des bibliothèques couramment disponibles. Et dans de nombreux cas, c'est toujours le cas. Quand vous arrivez à des ensembles de données plus volumineux, il y a beaucoup d'optimisations supplémentaires, y compris l'examen et les problèmes communs de casing spéciaux (en réduisant les matrices éparses là où c'est utile, par exemple), et en gérant les cas de bords. Souvent, vous pouvez soumettre un problème dans un formulaire standard à une fonction générale, et il déterminera le meilleur algorithme sous-jacent à utiliser en fonction de vos données. Pour un petit N, tous les algorithmes sont rapides, mais MATLAB rend la détermination de l'algorithme optimal un non-problème.

Ceci est écrit par quelqu'un qui déteste MATLAB, et a essayé de le remplacer en raison de problèmes d'intégration. D'après votre question, vous mentionnez avoir obtenu MATLAB 5 et l'avoir utilisé pour un cours. À ce niveau, vous pourriez vouloir regarder Octave , une implémentation open source avec la même syntaxe. Je devine que c'est jusqu'à MATLAB 5 niveaux maintenant (je joue seulement avec lui). Cela devrait vous permettre de «réussir votre examen». Pour les fonctionnalités MATLAB nues, il semble être proche. Il manque dans le support de la boîte à outils (qui, encore une fois, sert principalement à reformuler les appels de fonction à des formes familières aux ingénieurs sur le terrain et sélectionne l'algorithme sous-jacent approprié à utiliser).




Cela fait un certain temps que j'ai utilisé Matlab, mais de mémoire il fournit (bien qu'avec des plugins supplémentaires) la capacité de générer la source pour vous permettre de réaliser votre algorithme sur un DSP.

Puisque python est un langage de programmation généraliste, il n'y a aucune raison de ne pas pouvoir tout faire en python dans matlab. Cependant, matlab fournit un certain nombre d'autres outils - par exemple. un très large éventail de fonctionnalités dsp, un large éventail de fonctionnalités de domaine S et Z.

Tout cela pourrait être codé à la main en python (puisque c'est un langage généraliste), mais si tout ce que vous cherchez est peut-être de dépenser de l'argent sur Matlab, c'est l'option la moins chère?

Ces fonctionnalités ont également été optimisées pour la performance. par exemple. La documentation pour Numpy spécifie que leur transformée de Fourier est optimisée pour la puissance des ensembles de données à 2 points. Si je comprends bien Matlab a été écrit pour utiliser la transformée de Fourier la plus efficace en fonction de la taille de l'ensemble de données, pas seulement la puissance de 2.

edit: Oh, et dans Matlab vous pouvez produire très simplement des graphismes sensationnels, ce qui est important lorsque vous présentez vos données. Encore une fois, certainement pas impossible en utilisant d'autres outils.




MATLAB est un outil fantastique pour

  • prototypage
  • simulation d'ingénierie et
  • visualisation rapide des données

Vous pouvez vraiment jouer avec, visualiser et tester vos idées sur un ensemble de données très efficacement. Il ne doit pas être considéré comme une alternative aux autres langages logiciels utilisés pour le développement de produits. Je le recommande fortement pour les tâches ci-dessus, même si c'est cher - des alternatives gratuites comme Octave et Python rattrapent.




Tiens tout. À quand remonte la dernière fois que vous avez programmé votre calculatrice pour jouer à tetris? Avez-vous réellement pensé que vous pouviez écrire ce que vous voulez dans ces 128k de RAM? Probablement pas. MATLAB n'est pas destiné à la programmation à moins que vous n'ayez affaire à d'énormes matrices. C'est la calculatrice graphique que vous extrayez quand vous avez des mégaoctets à gigaoctets de données à croquer et / ou à tracer. Apprenez juste des choses de base, mais ne vous tuez pas non plus en essayant de faire de Python une calculatrice graphique.

Vous aurez rapidement une idée de quand vous voulez croquer, tracer ou explorer dans MATLAB et quand vous voulez avoir tout ce que Python offre. Beaucoup d'ingénieurs se tournent vers le pré et le post-traitement en Python ou en Perl. De temps en temps même en appelant MATLAB pour les bits durs.

Ce sont des outils tellement différents que vous devez d'abord apprendre leurs forces de base sans essayer de remplacer l'un par l'autre. Accordé pour économiser de l'argent, j'utiliserais Octave ou skimp sur la facilité et j'apprendrais à travailler avec des matrices éparses en Perl ou en Python.




Links