53 votes

À quoi sert MATLAB ? Pourquoi est-il si utilisé par les universités ? Quand est-il meilleur que Python ?

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

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

L'écriture d'une fonction ou l'analyse d'un fichier est tout simplement pénible. Je n'en suis qu'au début, qu'est-ce que je rate ?

Dans le monde "réel", à quoi dois-je penser l'utiliser ? Quand peut-il faire mieux que Python ? Par mieux, j'entends : un moyen facile d'écrire quelque chose de performant.


UPDATE 1 : L'une des choses que j'aimerais le plus savoir est "Est-ce que j'ai raté quelque chose ?" :D

UPDATE 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 rompre la licence. Je m'intéresse à ses capacités et je me demande s'il mérite une étude plus approfondie (je n'aurai pas besoin de plus que la version 5). base MATLAB pour réussir l'examen :P ) il sera vraiment meilleur que Python pour un type de tâche spécifique dans le monde réel.

77voto

simon Points 5346

Adam n'a que partiellement raison. Beaucoup, sinon la plupart, des mathématiciens n'y toucheront jamais. Si un outil informatique est utilisé, ce sera quelque chose du genre Mathematica ou Érable . D'un autre côté, les départements d'ingénierie s'appuient souvent sur elle et certains mathématiciens appliqués y trouvent certainement leur compte. Elle est également très utilisée dans l'industrie dans certains domaines.

Il faut savoir que MATLAB a commencé par être une enveloppe pour Fortran bibliothèques pour l'algèbre linéaire. Pendant longtemps, il a eu une attitude selon laquelle "le monde entier est un tableau de doubles (flottants)". En tant que langage, il s'est développé de manière très organique, et il y a quelques défauts qui sont très bien intégrés, si vous le considérez simplement comme un langage de programmation.

Cependant, si vous le considérez comme un environnement permettant d'effectuer certains types de recherche, il présente de réels atouts. Il n'y a pas mieux pour faire de l'algèbre linéaire en virgule flottante. La notation est simple et puissante, l'implémentation rapide et fiable. Il est très bon pour générer des graphiques et autres tâches interactives. Il existe un grand nombre de "boîtes à outils" avec un bon code pour des tâches particulières, qui sont abordables. Il existe une grande communauté d'utilisateurs qui partagent des codes numériques (Python + ). NumPy n'a rien dans la même ligue, du moins pour le moment)

Python, avec tous ses défauts, est un bien meilleur langage de programmation (comme beaucoup d'autres). Cependant, il a une dizaine d'années de retard en termes d'outils.

Le point essentiel est que la majorité des personnes qui utilisent MATLAB ne sont pas vraiment des programmeurs, et ne veulent pas l'être.

C'est un mauvais choix pour un langage de programmation général ; il est excentrique, lent pour de nombreuses tâches (vous devez vectoriser les choses pour obtenir des codes efficaces), et pas facile à intégrer avec le monde extérieur. D'un autre côté, pour les choses qu'il sait faire, il est très très bon. Très peu de choses sont comparables. Il y a une société avec un support raisonnable et qui sait combien d'années-homme y ont été consacrées. Cela peut compter dans l'industrie.

Si l'on s'en tient strictement à votre comparaison entre Python et MATLAB, il s'agit principalement d'outils différents pour des tâches différentes. Dans les domaines où ils se chevauchent un peu, il est difficile de dire quelle est la meilleure voie à suivre (cela dépend beaucoup de ce que vous essayez de faire). Mais surtout, Python n'est pas très bon dans les points forts de MATLAB, et vice versa.

38voto

Oli Points 9566

La plupart des réponses ne pas obtenir le point.

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

EXTRÊMEMENT RAPIDE DE CODAGE

Je suis une vision par ordinateur étudiant au doctorat et ont été à l'aide de matlab pour 4 ans, avant mon doctorat, j'ai été en utilisant différents langages, dont C++, java, php, python... la Plupart des chercheurs en vision par ordinateur sont exclusivement à l'aide de matlab.

1) les Chercheurs ont besoin de prototypage rapide

Dans l'environnement de recherche, nous avons (je l'espère), souvent de nouvelles idées, et nous voulons tester vraiment rapide pour voir si il est bon de garder dans cette direction. Et le plus souvent, seule une petite sous-partie de ce que nous code sera utile.

Matlab est souvent plus lent à l'exécution, mais nous n'avons pas beaucoup de soins. Parce que nous ne savons pas à l'avance ce que la méthode va avoir du succès, il faut essayer beaucoup de choses, donc notre goulot de bouteille est temps de programmation, parce que notre code le plus souvent exécuter un peu de temps pour obtenir les résultats de publier, et c'est tout.

Donc nous allons voir 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, de sorte que je n'ai pas à les réinventer tout le temps:

modifier l'index d'une matrice 2d de coordonnées: ind2sub d'extrait de tous les correctifs de l'image: im2col; calculer un histogramme d'une image: hist(Im(:)); trouver les éléments dans une liste unique(list); ajouter un vecteur pour tous les vecteurs d'une matrice bsxfun(@plus,M,V); le produit de convolution sur n-dimensions des tableaux convn(A); calculer le temps de calcul d'une sous-partie du code: 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 c'est-à python...Mais C'est juste une douleur dans python, j'ai du aller sur google à chaque fois pour trouver 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 de changement, le produit de convolution de la fonction de gérer uniquement des doubles mais ne pas faire une erreur quand je lui donne char, il suffit de donner une mauvaise sortie... non

3) IDE

Un exemple: je lance un script. Il se produit une erreur à cause d'une matrice. Je peux encore exécuter du code avec la ligne de commande. Je me visualiser en train de faire: imagesc(matrix). Je vois que la dernière ligne de la matrice est bizarre. J'ai corrigé le bug. Toutes les variables sont toujours ensemble. Je sélectionne le reste du code, appuyez sur la touche F9 pour exécuter la sélection, et tout ce qui se passe. Debuging devient rapidement, grâce à qui.

Matlab souligne certains de mes erreurs avant l'exécution. Donc, je peux voir rapidement les problèmes. Il propose un moyen de rendre mon code plus rapide.

Il s'agit d'un impressionnant profiler inclus dans l'IDE. KCahcegrind est une douleur à utiliser par rapport à ça.

python Ide sont awefull. python sans ipython n'est pas utilisable. Je n'arrive jamais à le débogage, à l'aide de ipython.

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

4) code Concis

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

Pour supprimer à partir d'une matrice de 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 paralize mon code:

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

Quelle langue peut battre?

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 maux de tête avec index. Donc, je peux me concentrer sur ce que je veux, pas comment le programmer.

5) les outils de Traçage

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

Python de traçage, des outils ont beaucoup moins de fonctionnalités. Mais il est une chose super gênant. Vous pouvez tracer des figures en une seule fois par script??? si j'ai le long de script je ne peut pas afficher la fourre à chaque étape ---> inutile.

6) la Documentation

Tout est très rapide d'accès, tout est clair, les noms de fonction sont bien choisis. Avec python, j'ai toujours besoin de google trucs, regarde dans les forums ou stackoverflow.... temps complet de porc.

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

34voto

Mr Fooz Points 21092

J'utilise Matlab depuis de nombreuses années dans le cadre de mes recherches. C'est un excellent outil pour l'algèbre linéaire et il dispose d'un grand nombre de boîtes à outils bien écrites. Les versions les plus récentes commencent à le rapprocher d'un langage universel (meilleurs optimiseurs, meilleur modèle d'objet, règles de scoping plus riches, etc.)

L'été dernier, j'ai eu un emploi où j'ai utilisé Python + numpy au lieu de Matlab. J'ai apprécié ce changement de rythme. C'est un "vrai" langage (et tout ce que cela implique), et il possède de superbes fonctionnalités numériques comme les tableaux de diffusion. J'aime aussi beaucoup l'environnement ipython.

Voici quelques éléments que je préfère dans Matlab :

  • cohérence : MathWorks a consacré beaucoup d'efforts pour que les boîtes à outils se ressemblent et fonctionnent les unes avec les autres. Ils n'ont pas fait un travail parfait, mais c'est l'un des meilleurs que j'ai vu pour une base de code vieille de plusieurs décennies.
  • documentation : Je trouve très frustrant de comprendre certaines choses dans numpy et/ou python parce que la qualité de la documentation est inégale : certaines choses sont très bien documentées, d'autres pas du tout. C'est souvent très frustrant lorsque je vois des choses qui semblent imiter Matlab, mais qui ne le font pas tout à fait fonctionnent de la même manière. La possibilité de récupérer les sources est inestimable (pour être honnête, la plupart des boîtes à outils Matlab sont également livrées avec les sources).
  • la compacité : Pour ce que je fais, la syntaxe de Matlab est souvent plus compacte (mais pas toujours).
  • momentum : J'ai trop de code Matlab à modifier maintenant.

Si je n'avais pas une base de code existante aussi importante, j'envisagerais sérieusement de passer à Python + numpy.

15voto

dlamblin Points 14546

Tenez tout. C'est quand la dernière fois que tu as programmé ta calculatrice pour jouer à Tetris ? Pensiez-vous réellement pouvoir écrire tout ce que vous voulez dans ces 128k de RAM ? Probablement pas. MATLAB ne sert pas à programmer, sauf si vous avez affaire à d'énormes matrices. C'est la calculatrice graphique que vous sortez lorsque vous avez des mégaoctets ou des gigaoctets de données à traiter et/ou à tracer. Apprenez les bases, mais ne vous tuez pas à essayer de faire de Python une calculatrice graphique.

Vous saurez rapidement quand vous voudrez faire des calculs, des tracés ou des explorations dans MATLAB et quand vous voudrez profiter de tout ce qu'offre Python. De nombreux ingénieurs se tournent vers le pré et le post-traitement en Python ou Perl. Parfois, ils font même appel à MATLAB pour les tâches difficiles.

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

13voto

Lance Roberts Points 11164

MATLAB est idéal pour manipuler des tableaux, exécuter des fonctions mathématiques spécialisées et créer rapidement de beaux graphiques.

Je ne l'utiliserais probablement que pour les gros programmes, si je pouvais utiliser beaucoup de manipulations de tableaux/matrices.

Vous n'avez pas à vous préoccuper autant de l'environnement de développement intégré que dans les progiciels plus formels, ce qui facilite la prise en main par les étudiants sans grande expérience de la programmation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X