53 votes

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

J'ai récemment été invité à apprendre quelques bases de MATLAB pour une classe.

De quoi en faire tellement cool pour les chercheurs et les gens qui travaille à l'université? J'ai vu c'est cool de travailler avec des matrices et le traçage de choses... (des choses qui peut être fait facilement en Python à l'aide de certaines bibliothèques).

L'écriture d'une fonction ou de l'analyse d'un fichier est tout simplement pénible. Je suis encore au début, ce qui me manque?

Dans le monde "réel", que dois-je penser à l'utiliser? Quand doit-il peut faire mieux que Python? Pour une meilleure, je veux dire: moyen facile d'écrire quelque chose de performant.


Mise à JOUR 1: Une des choses que j'aimerais savoir le plus, c'est "ai-je raté quelque chose?" :D

Mise à JOUR 2: Merci pour vos réponses. Ma question n'est pas au sujet de l'acheter ou ne pas acheter MATLAB. L'université a la possibilité de me donner une copie d'une ancienne version de MATLAB (MATLAB 5 je crois) pour gratuit, sans rupture de la licence. Je suis intéressé dans ses capacités et si elle mérite une étude plus approfondie (je n'ai besoin de rien de plus que de base de MATLAB dans oder pour passer l'examen :P ) ça va vraiment être mieux que Python pour un type spécifique de la tâche dans le monde réel.

77voto

simon Points 5346

Adam n'est que partiellement juste. Beaucoup, sinon la plupart, les mathématiciens ne sera jamais la toucher. Si il y a un outil informatique utilisé à tous, ça va être quelque chose comme Mathematica ou Maple. Des services d'ingénierie, d'autre part, s'appuient souvent sur elle, et il y a certainement des choses utiles pour certains mathématiciens appliqués. Il est aussi largement utilisé dans l'industrie dans certains domaines.

Quelque chose que vous avez à réaliser sur MATLAB est qu'il a commencé comme un wrapper sur Fortran bibliothèques pour l'algèbre linéaire. Pendant longtemps, il avait une attitude que "tout le monde est un tableau de doubles (flotteurs)". Comme une langue, il a augmenté très organique, et il y a quelques défauts qui sont très bien cuit, si vous le regardez comme un langage de programmation.

Toutefois, si vous le regardez comme un environnement pour le faire certains types de recherche, il a quelques atouts réels. C'est à peu près aussi bon qu'il obtient pour les faire à virgule flottante d'algèbre linéaire. La notation est simple et puissant, la mise en œuvre rapide et de confiance. Il est très bon à générer des parcelles et d'autres tâches interactives. Il existe un grand nombre de "boîtes à outils" avec de bonnes code pour des tâches particulières, qui sont abordables. Il y a une grande communauté d'utilisateurs qui partagent des codes numériques (Python + NumPy n'a rien dans la même ligue, du moins pas encore)

Python, les verrues et tous, est un bien meilleur langage de programmation (comme le sont beaucoup d'autres). Cependant, il est d'une dizaine d'années en retard en termes d'outils.

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

C'est un mauvais choix pour un langage de programmation général; c'est bizarre, lent pour de nombreuses tâches (vous avez besoin de vectoriser les choses pour obtenir des codes performants), et pas facile à intégrer avec le monde extérieur. D'autre part, pour les choses qu'il fait bien, c'est très très bon. Très peu de choses de comparer. Il y a une société avec le soutien raisonnable et qui sait combien d'années-homme. Cela peut d'importance dans l'industrie.

Strictement à la recherche à votre Python vs MATLAB comparaison, ils sont pour la plupart des outils différents pour différents emplois. Dans les zones où ils ne se chevauchent un peu, il est difficile de dire ce que le meilleur itinéraire pour aller de l'est (dépend beaucoup de ce que vous essayez de le faire). Mais surtout Python n'est pas bonne à MATLAB points forts, 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'ai été en utilisant matlab depuis de nombreuses années dans mes recherches. Il est idéal pour l'algèbre linéaire et a un grand ensemble de bien écrits, des boîtes à outils. Les versions les plus récentes commencent à pousser à être plus proche d'un usage général de la langue (des meilleurs optimiseurs, un bien meilleur modèle d'objet, plus riche règles de portée, etc.).

L'été dernier, j'ai eu un emploi où j'ai utilisé 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 quelques grands numérique fonctionnalités comme la radiodiffusion tableaux. J'aime aussi beaucoup le ipython de l'environnement.

Voici quelques choses que je préfère sur Matlab:

  • cohérence: MathWorks a consacré beaucoup d'effort à faire les boîtes à outils ressembler et fonctionner comme de l'autre. Ils n'ont pas fait un travail parfait, mais c'est l'un des meilleurs que j'ai vu pour un code qui est vieux de plusieurs décennies.
  • documentation: je trouve ça très frustrant pour comprendre certaines choses dans numpy et/ou python, car la documentation de la qualité est inégale: certaines choses sont documentés très bien, d'autres pas du tout. Il est souvent plus frustrant quand je vois des choses qui semblent imiter Matlab, mais ne sont pas tout à fait la même voie. Être en mesure de saisir la source est d'une valeur inestimable (pour être juste, la plupart des boîtes à outils Matlab navire avec la source de trop)
  • compacité: pour ce que je fais, Matlab syntaxe est souvent plus compact (mais pas toujours)
  • momentum: j'ai trop de code Matlab de changer maintenant

Si je n'avais pas une telle grande base de code existante, j'avais sérieusement envisager de passer à Python + numpy.

15voto

dlamblin Points 14546

Maintenez le tout. Quand est la dernière fois que vous avez programmé votre calculatrice pour jouer à tetris? Avez-vous pensez vraiment que vous pouvez écrire ce que vous voulez dans ces 128k de RAM? Probablement pas. MATLAB est pas pour la programmation, à moins que vous soyez aux prises avec d'énormes matrices. C'est la calculatrice de graphique vous fouetter quand vous avez Mégaoctets à plusieurs Gigaoctets de données à croquer et/ou de la parcelle. D'apprendre des trucs de base, mais aussi de ne pas vous tuer en essayant de faire en Python une calculatrice graphique.

Vous allez rapidement avoir une idée de quand vous voulez croquer, de la parcelle ou de l'explorer dans MATLAB et quand vous voulez avoir tout ce que Python offre. Beaucoup d'ingénieurs tour à pré-et post-traitement en Python ou Perl. Parfois même juste appel au logiciel MATLAB pour le morceaux durs.

Ils sont complètement différents outils que vous devriez apprendre leurs principaux atouts premiers sans essayer de remplacer l'une avec l'autre. Accordé pour économiser de l'argent que j'avais, soit l'utilisation d'une Octave ou lésiner sur la facilité et apprendre à travailler avec des matrices creuses en Perl ou Python.

13voto

Lance Roberts Points 11164

MATLAB est idéal pour la manipulation de tableaux, les fonctions mathématiques spécialisées et la création rapide de jolis graphes.

Je ne l'utiliserais probablement que pour de gros programmes si je pouvais utiliser beaucoup de manipulations de matrice / matrice.

Vous n'avez pas à vous soucier de l'EDI autant que dans des paquets plus formels, il est donc plus facile pour les étudiants sans grande expérience en programmation de se lancer.

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