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 travaillant à 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 dans Python en utilisant certaines bibliothèques).
Écrire une fonction ou analyser un fichier est simplement douloureux. Je suis toujours au début, qu'est-ce qui me manque?
Dans le "vrai" monde, à quoi 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.
UPDATE 1: Une des choses que je voudrais savoir le plus est "Est-ce que je manque quelque chose?" :RÉ
UPDATE 2: Merci pour vos réponses. Ma question ne concerne pas acheter ou ne pas acheter MATLAB. L'université a la possibilité de me donner gratuitement une copie d'une ancienne version de MATLAB (MATLAB 5, je suppose) sans casser la licence. Je suis intéressé par ses capacités et s'il mérite une étude plus approfondie (je n'aurai besoin de rien de plus que de base MATLAB pour pouvoir passer l'examen: P), ce sera vraiment mieux que Python pour un type de tâche spécifique dans le monde réel.
Adam n'a que partiellement raison. Beaucoup, sinon la plupart, les mathématiciens ne le toucheront jamais. Si un outil informatique est utilisé, il s'agira de Mathematica ou Maple . Les départements d’ingénierie, d’autre part, y ont souvent recours et certains mathématiciens appliqués ont certainement des choses utiles. Il est également très utilisé dans l'industrie dans certaines régions.
Quelque chose que vous devez comprendre à propos de MATLAB est qu'il a commencé comme un wrapper sur les bibliothèques Fortran pour l'algèbre linéaire. Pendant longtemps, il a eu l'attitude que "tout le monde est un tableau de doubles (flotteurs)". En tant que langage, il a connu une croissance très organique, et certaines imperfections sont très présentes, si vous le considérez comme un langage de programmation.
Cependant, si vous le considérez comme un environnement propice à certains types de recherche, il présente de réels atouts. C'est à peu près aussi bon que ça pour faire de l'algèbre linéaire à virgule flottante. La notation est simple et puissante, la mise en œuvre rapide et fiable. C'est très bon pour générer des parcelles et d'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 l'instant)
Python, verrues et tout, est un langage de programmation bien meilleur (comme beaucoup d'autres). Cependant, il existe une dizaine d'années de retard en termes d'outils.
Le point clé est que la majorité des personnes qui utilisent MATLAB ne sont pas vraiment des programmeurs et ne le souhaitent pas.
C'est un choix moche pour un langage de programmation général; c'est bizarre, lent pour de nombreuses tâches (il faut vectoriser les choses pour obtenir des codes efficaces) et difficile à intégrer au monde extérieur. Par contre, pour ce qui est bon, c’est très très bon. Très peu de choses se comparent. Il y a une entreprise avec un soutien raisonnable et qui sait combien d'hommes-années y ont consacré. Cela peut avoir de l'importance dans l'industrie.
En comparant strictement votre comparaison Python vs MATLAB, ce sont des outils différents pour des tâches différentes. Dans les zones où elles 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 pour les points forts de MATLAB, et vice-versa.
La plupart des réponses ne comprennent pas le point.
Il y a UNE raison pour laquelle matlab est si bon et si largement utilisé:
Doctorant en vision par ordinateur, j'utilise Matlab depuis 4 ans. Avant ma thèse, j'utilisais différents langages, notamment C++, Java, php, python ... La plupart des chercheurs en vision par ordinateur utilisent exclusivement Matlab.
Dans le domaine de la recherche, nous avons (espérons-le) souvent de nouvelles idées et nous voulons les tester 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 au moment de l'exécution, mais cela nous est égal. Parce que nous ne savons pas à l'avance quelle méthode va réussir, nous devons essayer beaucoup de choses, donc notre goulot d'étranglement est le temps de la programmation, car notre code sera exécuté plusieurs fois pour obtenir les résultats à publier, et c'est tout.
Voyons donc comment matlab peut aider.
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 patchs d'une image: im2col
; calculer l'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 tableaux à n dimensions convn(A)
; calculer le temps de calcul d'une sous-partie du code: tic; %%code; toc
; interface graphique pour rogner 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 celui-ci est le python ... Mais c'est juste une douleur en python, je dois aller à chaque fois sur google pour rechercher le nom de la fonction dont j'ai besoin, puis ajouter des paquetages, qui ne sont pas compatibles les unes avec les autres, le format de la matrice change, la fonction de convolution ne traite que les doublons mais ne commet pas d'erreur lorsque je lui donne caractère, donne juste une sortie erronée ... non
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 train de faire: 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, appuie sur F9 pour exécuter la sélection et tout se passe. Le débogage devient rapide, grâce à cela.
Matlab souligne certaines de mes erreurs avant exécution. Je peux donc rapidement voir les problèmes. Il propose un moyen de rendre mon code plus rapide.
Il y a un génial profileur inclus dans l'EDI. KCahcegrind est une telle douleur à utiliser par rapport à cela.
les IDEs de Python sont minables. python sans ipython n'est pas utilisable. Je n'arrive jamais à déboguer, en utilisant ipython.
+ autocompletion, aide pour les arguments de fonction, ...
Pour normaliser toutes les colonnes d'une matrice (ce 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 GP:
gpuX = gpuarray(X);
%%% code normally and everything is done on GPU
Pour paraliser 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 facilite la lecture du code, et pas de maux de tête avec les index. Je peux donc me concentrer sur ce que je veux programmer et non sur la façon de le programmer.
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 ennuyeuse. Vous pouvez tracer des figures une seule fois par script ??? si j'ai le long du script je ne peux pas afficher de contenu à chaque étape ---> inutile.
Tout est très rapide d'accès, tout est limpide, les noms de fonctions sont bien choisis. Avec Python, j'ai toujours besoin de google trucs, regarder dans les forums ou stackoverflow .... complet temps porc.
PS: Enfin, ce que je déteste avec matlab: son prix
J'utilise Matlab depuis de nombreuses années dans mes recherches. C'est excellent pour l'algèbre linéaire et dispose d'un grand nombre de boîtes à outils bien écrites. Les versions les plus récentes commencent à le pousser à se rapprocher d'un langage généraliste (de meilleurs optimiseurs, un modèle d'objet bien meilleur, des règles de cadrage plus riches, etc.).
L’été dernier, j’avais un emploi où j’utilisais Python + numpy au lieu de Matlab. J’ai apprécié le changement de rythme. C’est un "vrai" langage (et tout ce que cela implique), et il a Certaines fonctionnalités numériques, telles que les tableaux de diffusion, me plaisent également beaucoup.
Voici certaines choses que je préfère à propos de Matlab:
Si je n'avais pas une base de code aussi grande, je penserais sérieusement à passer à Python + numpy.
Tiens tout. Quand avez-vous programmé votre calculatrice pour la dernière fois pour jouer à Tetris? Pensiez-vous réellement pouvoir écrire tout ce que vous voulez dans ces 128 Ko de RAM? Probablement pas. MATLAB n'est pas pour la programmation sauf si vous avez affaire à d'énormes matrices. C'est la calculatrice graphique que vous sortez lorsque vous avez des mégaoctets en gigaoctets de données à traiter et/ou à tracer. Apprenez juste des choses basiques, mais ne vous tuez pas non plus en essayant de faire Python être une calculatrice graphique.
Vous aurez rapidement une idée du moment où vous souhaitez effectuer une analyse, une intrigue ou une exploration dans MATLAB et lorsque vous souhaitez disposer de tout ce que Python. De nombreux ingénieurs se tournent vers le traitement préalable et ultérieur dans = Python ou Perl. Parfois, même simplement appeler MATLAB pour les bits durs.
Ce sont des outils tellement différents que vous devez d’abord connaître leurs points forts sans essayer de les remplacer. Pour économiser de l'argent, j'utilisais Octave ou je lésinais sur la facilité et j'apprenais à travailler avec des matrices creuses en Perl ou en Python.
MATLAB est idéal pour la manipulation de tableaux, les fonctions mathématiques spécialisées et la création rapide de Nice.
Je ne l'utiliserais probablement que pour les gros programmes si je pouvais utiliser beaucoup de manipulation de matrice/matrice.
Vous n'avez pas à vous soucier de IDE autant que dans les paquets plus formels, il est donc plus facile pour les étudiants qui n'ont pas beaucoup d'expérience en programmation de se lancer.
MATLAB est un élément populaire et largement adapté d’un progiciel sophistiqué. Ce serait une erreur de penser qu’il s’agit simplement d’un logiciel de mathématiques car il propose 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 le travail a été fait sans avoir besoin de tous les gadgets de MATLAB. Cependant, il peut ne pas être approprié de comparer Python et MATLAB dans chaque situation. Comme pour tout le reste, la décision dépend de ce que vous devez faire.
J'ai utilisé MATLAB au premier cycle pour la conception et la simulation de systèmes de contrôle, ainsi que pour le traitement d'images au collège. Pour ces champs, MATLAB a tout son sens en raison des puissantes boîtes à outils de contrôle et de traitement des images. Comme chacun l’a mentionné, les opérations sur les tableaux, qui sont utilisées dans chaque script MATLAB que vous auriez besoin d’écrire, sont très simples avec MATLAB.
Une autre bonne chose à propos de MATLAB est qu’il est très facile et rapide de prototyper et d’essayer des idées en utilisant les fonctions intégrées de la boîte à outils. Par exemple, importer une image, calculer son histogramme ou effectuer un traitement simple ne nécessite aucun effort. Un inconvénient de MATLAB pourrait être sa rapidité en raison de sa nature interprétée. Cependant, si 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 package complet pour vous permettre de faire votre travail sans avoir à chercher des bibliothèques externes et à implémenter des fonctions supplémentaires.
Un dernier point sur MATLAB, que je vois pas mentionné dans les réponses, est qu’il dispose d’un environnement de modélisation/simulation visuel très puissant appelé Simulink . Il est plus facile de concevoir et de simuler des systèmes plus grands avec Simulink.
Enfin, encore une fois, tout dépend du problème que vous devez résoudre. Si votre domaine problématique peut utiliser l'une des boîtes à outils MATLAB et que vous avez accès à MATLAB, vous pouvez être sûr que vous disposez du bon outil pour le résoudre.
MATLAB, comme mentionné par d’autres, est doué pour la manipulation matricielle et a été construit à l’origine comme une extension du bien connu BLAS et LAPACK bibliothèques utilisées pour l'algèbre linéaire. Il s'interface bien avec d'autres langages tels que Java et est bien apprécié par les sociétés d'ingénierie et scientifiques pour ses bibliothèques bien développées et documentées. D'après ce que je sais de Python et NumPy, bien qu'ils partagent de nombreuses fonctionnalités fondamentales de MATLAB, ils ne disposent pas de toutes les fonctionnalités de leurs bibliothèques.
Personnellement, j'utilise MATLAB parce que c'est ce que j'ai appris lors de mon stage, c'est ce que j'ai utilisé lors de mes études supérieures et c'est ce que j'ai utilisé lors de mon premier emploi. Je n'ai rien contre Python (ni aucun autre langage). C'est juste ce que je suis habitué aussi.
En outre, il existe une autre version gratuite en plus de scilab mentionnée par @ Jim C de gnu appelé Octave .
Personnellement, j’ai tendance à penser que Matlab est un calculateur matriciel interactif et un outil de traçage avec quelques fonctionnalités de script, plutôt qu’un langage de programmation complet comme Python ou C. La raison de son succès Comme vous le soulignez, ce langage est extrêmement frustrant à utiliser pour des tâches plus générales, comme vous le savez si bien. même le traitement de chaîne le plus simple. Sa syntaxe est originale, et il n’a pas été créé avec les abstractions nécessaires pour les projets de plus de 100 lignes ou plus.
Je pense que la raison pour laquelle les gens essaient d'utiliser Matlab en tant que langage de programmation sérieux est que la plupart des ingénieurs (il y a des exceptions; mon diplôme est en génie biomédical et j'aime la programmation) sont des programmeurs horribles et détestent programmer. On leur enseigne Matlab au collège, principalement pour les mathématiques matricielles, et ils apprennent quelques programmes rudimentaires dans le cadre de l'apprentissage de Matlab, et présument que Matlab est assez bon. Je ne peux penser à personne que je connaisse qui connaisse une langue autre que Matlab, mais l'utilise quand même pour autre chose que quelques applications de calcul en nombre.
Je crois que vous avez un très bon point et que celui-ci a été soulevé dans l'entreprise où je travaille. La société est limitée dans sa capacité à appliquer Matlab en raison des coûts de licence impliqués. Un développeur a prouvé que Python était un substitut très approprié, mais il est tombé sur des oreilles ignorantes car les propriétaires de ces oreilles ...
Si ça vaut 10 000 £ (??) ça vaut le coup !!
Je suis avec toi ici. Python est un très bon remplaçant pour MatLab.
Je dois préciser que l'on m'a dit que la société utilisait peut-être 5% à 10% des capacités de MatLabs et c'est la base de mon accord avec l'affiche originale
La raison la plus probable pour laquelle il est si souvent utilisé dans les universités est que les professeurs de mathématiques y sont habitués, les comprennent et savent comment les intégrer dans leurs programmes.
Entre matplotlib + pylab et NumPy Je ne pense pas qu'il y ait beaucoup de différence entre Matlab et python autre que l'inertie culturelle suggérée par @ Adam Bellaire.
MATLAB est un outil fantastique pour
Vous pouvez vraiment jouer avec, visualiser et tester vos idées sur un ensemble de données de manière très efficace. 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, bien que cela coûte cher - des alternatives gratuites comme Octave et Python sont en train de rattraper.
Semble être pure inertie. Là où il est utilisé, tout le monde est trop occupé pour apprendre IDL ou numpy avec suffisamment de détails pour pouvoir basculer, et ne souhaite pas réécrire de bons programmes de travail. Heureusement, ce n'est pas tout à fait vrai, mais c'est assez vrai dans suffisamment d'endroits pour que Matlab soit présent pendant longtemps. Comme Fortran (en utilisation active où je travaille!)
L'une des raisons pour lesquelles MATLAB est populaire auprès des universités est identique à celle des autres universités: beaucoup de professeurs le connaissent bien, et il est assez robuste.
J'ai parlé à beaucoup de gens qui sont particulièrement intéressés par la capacité naissante de MATLAB à exploiter le GPU au lieu de travailler en série. Après avoir utilisé Python au cycle supérieur, je souhaiterais avoir la possibilité de travailler avec MATLAB dans ce cas. Cela ferait des calculs d'espace vectoriel un jeu d'enfant.
Les plug-ins construits au-dessus de la fonctionnalité principale sont la principale raison de son utilité dans l'industrie. Presque tout le développement actif de Matlab au cours des dernières années s’est concentré sur ces domaines.
Malheureusement, vous n’avez guère l’occasion de les utiliser dans un environnement académique.
Je sais que cette question est ancienne et ne peut donc plus être regardée, mais j'estimais qu'il était nécessaire de commenter. En tant qu’ingénieur en aérospatiale chez Georgia Tech, je peux dire sans hésiter que MATLAB est génial. Vous pouvez l’interfacer rapidement avec vos feuilles de calcul Excel pour collecter des données sur la vitesse à laquelle les roquettes volent haut et haut, sur l’effet du vent sur ces mêmes roquettes et sur l’importance des moteurs différents. Au-delà de la fusée, des concepts similaires entrent en jeu pour les voitures, les camions, les avions, les vaisseaux spatiaux et même les sports. Vous pouvez extraire de grandes quantités de données, les manipuler et vous assurer que vos résultats sont comme ils devraient être. Dans le cas où quelque chose est désactivé, vous pouvez ajouter un saut de ligne lorsqu'une erreur survient pour déboguer votre programme sans avoir à recompiler chaque fois que vous souhaitez exécuter votre programme. Est-ce plus lent que certains autres programmes? Eh bien, techniquement. Je suis sûr que si vous voulez effectuer le calcul des chiffres, c’est bien pour un processeur graphique NVIDIA, ce serait probablement plus rapide, mais cela demande beaucoup plus d’efforts avec un débogage plus difficile.
En tant que langage de programmation général, MATLAB est faible. Il n'est pas conçu pour fonctionner avec Python, Java, ActionScript, C/C++ ou tout autre langage à usage général. Il est destiné à la niche d'ingénierie et de mathématiques que son nom l'indique, et il le fait à merveille.
MATLAB était un wrapper autour des bibliothèques couramment disponibles. Et dans de nombreux cas, c'est toujours le cas. Lorsque vous atteignez des ensembles de données plus volumineux, il comporte de nombreuses optimisations supplémentaires, notamment l'examen et la résolution de problèmes courants dans les casiers (réduction des matrices creuses, le cas échéant), et la gestion des cas Edge. Souvent, vous pouvez soumettre un problème sous une forme standard à une fonction générale, ce qui déterminera le meilleur algorithme sous-jacent à utiliser en fonction de vos données. Pour les petits N, tous les algorithmes sont rapides, mais MATLAB empêche de déterminer l'algorithme optimal.
Ceci est écrit par quelqu'un qui déteste MATLAB et a essayé de le remplacer en raison de problèmes d'intégration. Dans votre question, vous parlez d’obtenir MATLAB 5 et de l’utiliser pour un cours. À ce niveau, vous voudrez peut-être regarder Octave , une implémentation open source avec la même syntaxe. J'imagine que cela dépend des niveaux de MATLAB 5 (je ne joue qu'avec ça). Cela devrait vous permettre de "réussir votre examen". Pour la fonctionnalité MATLAB nue, il semble être proche. Il manque dans le support de la boîte à outils (qui, là encore, sert principalement à reformuler les appels de fonctions à des formulaires familiers aux ingénieurs sur le terrain et à sélectionner le bon algorithme sous-jacent à utiliser).
Cela fait quelque temps que je n'ai pas utilisé Matlab, mais de mémoire cela fournit (bien qu'avec des plugins supplémentaires) la possibilité de générer une source pour vous permettre de réaliser votre algorithme sur un DSP.
Puisque python est un langage de programmation général, il n’ya aucune raison pour que vous ne puissiez pas tout faire en python que vous pouvez faire dans matlab. Cependant, matlab le fait fournit un certain nombre d’autres outils - par exemple, un très large éventail de fonctionnalités de dsp, un large éventail de fonctionnalités de domaine S et Z.
Tous ces éléments pourraient être codés à la main dans python (puisqu'il s'agit d'un langage à usage général), mais si vous ne voulez que les résultats, dépenser de l'argent sur Matlab est peut-être l'option la moins chère?
Ces fonctionnalités ont également été optimisées. par exemple. La documentation de Numpy spécifie que leur transformation de Fourier est optimisée pour une puissance de jeux de données à 2 points. Si j'ai bien compris, Matlab a été conçu pour utiliser la transformation de Fourier la plus efficace, adaptée à la taille de l'ensemble de données, et pas seulement à la puissance 2.
edit: Oh, et dans Matlab, vous pouvez produire très facilement des graphiques sensationnels en regardant, ce qui est important lorsque vous présentez vos données. Encore une fois, certainement pas impossible en utilisant d'autres outils.
Je pense que vous avez répondu à votre propre question en notant que Matlab est "cool de travailler avec des matrices et de tracer des graphiques". Toute application nécessitant beaucoup de calculs matriciels et de visualisation sera probablement la plus facile à faire dans Matlab.
Cela dit, la syntaxe de Matlab est inconfortable et indique l'âge de la langue. En revanche, Python est un langage de programmation polyvalent beaucoup plus agréable et, avec les bonnes bibliothèques, peut faire beaucoup de ce que fait Matlab. Cependant, Matlab aura toujours une syntaxe plus concise que Python pour la manipulation de vecteurs et de matrices.
Si une grande partie de votre programmation implique de telles manipulations, telles que le traitement du signal et certaines techniques statistiques, Matlab sera un meilleur choix.
Matlab sait bien faire des calculs. Également matrice et manipulation de matrice. Il a beaucoup de bibliothèques intégrées utiles (dépend de la version), je pense que c'est plus facile à utiliser que python si vous allez calculer des équations.
First Mover Advantage . Matlab existe depuis la fin des années 1970. Python est arrivé plus récemment et les bibliothèques qui le rendent approprié pour les tâches de type Matlab ont été ajoutées encore plus récemment. Les gens sont habitués à Matlab, ils l'utilisent donc.