Question douce: Où Python s'intègre-t-il dans l'image?


9

J'ai donc débattu pour savoir si je devrais ou non prendre la peine d'apprendre Python. De parler avec mes professeurs, Matlab semble être le langage commun utilisé dans les mathématiques appliquées / science informatique en ce qui concerne le monde universitaire ; tandis que dans l' industrie , mes professeurs (en particulier ceux qui ont travaillé dans l'industrie) ont dit que l'apprentissage du c ++ est la voie la plus sûre.

J'aimerais avoir des nouvelles de ceux d'entre vous, à la fois dans le monde universitaire et dans l'industrie, pour savoir si je devrais même me soucier de Python, ou simplement devenir vraiment bon dans ce que je sais (MATLAB et C ++) pour le moment.

Mise à jour : Geoff soulève un bon point, je devrais probablement préciser quelques détails:

Je suis actuellement un premier cycle de ma dernière année, étudiant les mathématiques avec une spécialisation en calcul. J'aimerais poursuivre des études supérieures et rester dans la recherche (je ne me suis jamais vu apprécier l'enseignement) ou travailler dans un laboratoire. Les deux sont idéaux. En ce qui concerne les domaines de recherche, probablement quelque chose dans le sens de l'analyse numérique ou de la probabilité. Dans le cas où le plan A ne fonctionne pas, je serais ouvert à travailler dans l'industrie, tant que me préparer pour l'industrie ne prend pas trop de temps à l'école. Donc, je me suis dit que je devrais apprendre les langues qui sont courantes dans l'industrie comme sauvegarde. Mais c'est aussi pourquoi je suis en conflit. Je ne peux pas étudier toutes les langues ou me préparer à toutes les possibilités car cela prendrait beaucoup trop de temps.


1
Votre question est bonne, mais probablement un peu trop ouverte et vague. Quelle discipline étudiez-vous et que pensez-vous vouloir faire?
Geoff Oxberry

1
Pour un exemple de choses qui peuvent être faites avec Python qui ne fonctionneraient pas bien dans MATLAB ou C ++ pur: epubs.siam.org/doi/abs/10.1137/110856976 . (alerte d'autopromotion sans vergogne)
David Ketcheson

Réponses:


15

Une difficulté avec l'un de ces types de questions est que la réponse dépend fortement de la communauté.

Pour répondre à certaines de vos questions au hasard:

MATLAB est beaucoup utilisé à la fois dans le monde universitaire et dans l'industrie. L'une des raisons pour lesquelles il est assez utilisé dans l'industrie est qu'il est enseigné dans les universités. Je sais pertinemment que MATLAB est utilisé au Lincoln Laboratory et dans les divisions de recherche et développement de DuPont.

Il existe des progiciels écrits en Python qui sont bons en calcul symbolique, tels que sympy et SAGE. Selon vos intérêts particuliers, les exigences de fonctionnalités et vos préférences personnelles, Mathematica (ou Maple, ou d'autres systèmes d'algèbre informatique) peut être supérieur à ces packages.

MATLAB a une boîte à outils mathématiques symbolique qui peut être utilisée pour certains calculs symboliques, mais ses capacités de manipulation symbolique, selon mon expérience, sont plus faibles que Mathematica et Python. Une manipulation symbolique pourrait théoriquement être effectuée en C ++, mais elle est peu maniable. MATLAB n'est pas non plus un bon langage à usage général. Il fait bien l'algèbre linéaire et les mathématiques numériques, mais il n'a pas de bonnes capacités d'entrée / sortie. Il n'a pas de bonnes capacités parallèles (même s'il existe des variantes comme MATLAB parallèle, MATLAB Star-P et Parallel Computing Toolbox) par rapport à C ++ ou Python. Même ses capacités graphiques pourraient utiliser un certain travail. MATLAB est également coûteux, sauf si vous êtes affilié à une institution disposant d'une licence. Chaque boîte à outils est coûteuse à l'achat et coûte généralement de l'ordre de centaines à milliers de dollars.

Mathematica fait du calcul numérique en plus du calcul symbolique. Je n'ai pas vu des gens l'utiliser autant pour le calcul numérique que j'ai vu des gens utiliser Python et MATLAB pour le travail numérique. Il a également des capacités parallèles, mais ne s'adapte pas aux grands superordinateurs.

Python est un bon langage à usage général qui est considéré comme facile à apprendre et utilisable. Il est utilisé sur les grands supercalculateurs (voir, par exemple, PyClaw, petsc4py, mpi4py et autres), et évolue bien. Il a également des packages numériques très appréciés (tels que NumPy et SciPy); une grande communauté active; bonnes capacités de traitement d'entrée / sortie; et de bonnes bibliothèques graphiques, ainsi qu'un grand référentiel de bibliothèques (consultez PyPI). Il est gratuit par rapport aux packages propriétaires mentionnés ci-dessus. Vous pouvez trouver la plupart des fonctionnalités de MATLAB ou Mathematica dans des packages Python disponibles gratuitement. Le principal inconvénient de Python est qu'il a tendance à être plus lent que les langages compilés comme C ++, bien que cet inconvénient diminue avec le développement continu de Cython, Numba et PyPy; il peut également être atténué en remplaçant le code Python plus lent par du code C (ou C ++ ou Fortran) et des wrappers Python correctement écrits. En cours d'interprétation, de nombreuses personnes rapportent une productivité plus élevée avec Python que les langages compilés. Il est assez populaire et mérite probablement d'être appris si vous avez le temps.

Le C ++ est un langage compliqué et son utilisation en science informatique est controversée. Son large éventail de fonctionnalités peut faciliter l'écriture de logiciels difficiles à entretenir et dont la compilation prend une éternité. Cependant, utilisées judicieusement, des fonctionnalités telles que les modèles et la surcharge des opérateurs peuvent être utilisées à bon escient, comme cela a été le cas dans des projets comme deal.II, Blaze et Elemental (entre autres). Le C ++ a une courbe d'apprentissage abrupte en ce qui concerne ses fonctionnalités avancées, et j'ai entendu des rapports anecdotiques de personnes prenant des années pour avoir l'impression d'avoir appris la langue complète. Néanmoins, c'est aussi un langage populaire, malgré les problèmes d'utilisation et l'ensemble de fonctionnalités compliqué. Il vaut probablement la peine d'apprendre, ne serait-ce que pour vous rendre plus employable; ses principaux concurrents en informatique sont Fortran et C, qui méritent également d'être étudiés.

Tout ce que vous décidez d'apprendre sera basé sur ce dont vous avez réellement besoin. Bien sûr, c'est agréable d'apprendre à la fois Python et C ++, mais compte tenu des contraintes de temps et de ressources, vous n'allez probablement apprendre que ce dont vous aurez réellement besoin, et cela dépend de la communauté dans laquelle vous travaillez.


Donc, en ce qui concerne le monde universitaire, diriez-vous qu'il vaut mieux investir du temps à apprendre Python au lieu de C ++?
AlanH

1
Encore une fois, tout dépend. Je suis toujours plus du côté académique et j'utilise Python tout le temps. Je dois aussi encore utiliser C ++ pour le travail écrit dans ce langage. Mon opinion personnelle est que l'apprentissage de Python en premier sera probablement plus rapide pour vous que si vous appreniez d'abord le C ++, mais je ne sais pas quels probabilistes / processus stochastiques / combinatoires les gens utilisent, donc votre kilométrage peut varier.
Geoff Oxberry

Je suis d'accord avec Geoff que l'apprentissage du python en premier est une bonne idée, car cela vous permettra d'aller beaucoup plus vite. Le C ++ est un bon langage, mais la courbe d'apprentissage est nettement plus élevée et l'apprendre sans enthousiasme est sans doute pire que de ne pas l'apprendre du tout.
LKlevin

"Le C ++ a une courbe d'apprentissage abrupte en ce qui concerne ses fonctionnalités avancées, et j'ai entendu des rapports anecdotiques de personnes prenant des années pour avoir l'impression d'avoir appris le langage complet". Oui, je ne pourrais pas être plus d'accord. Je pense que tout programmeur digne de ce nom devrait apprendre le c / c ++ un certain temps dans sa vie, mais il vous faudra certainement 10000 heures pour vous sentir vraiment comme un expert avec eux. +1
James

11

Comme l'ont souligné Misha et Geoff Oxberry, Mathematica a vraiment un objectif différent (simplement parce que vous pouvez enfoncer un clou avec un tournevis ne signifie pas que vous devriez). Je considère donc que votre question est "Si je connais Matlab, pourquoi devrais-je apprendre Python?" [Modifier: et apparemment, vous l'avez fait.]

À toutes fins utiles, Matlab est l'anglais de l'informatique scientifique - avec toutes les connotations positives et négatives que cette analogie implique. Un bon point spécifique est que le code Matlab est susceptible d'être utile (c'est-à-dire exécutable aussi bien que compréhensible) à plus de personnes que le code dans n'importe quel autre langage. (C'est la raison principale pour laquelle je fournis des codes Matlab pour tous mes algorithmes.) De plus, le bureau Matlab peut être vraiment utile lors du prototypage, en particulier la possibilité d'exécuter des bits de code (cellules) directement à partir de l'éditeur, ainsi que le dans le profileur.

Cela étant dit, si vous voulez apprendre un autre langage de haut niveau pour le plaisir et le profit, vous pourriez faire pire que Python. Quelques raisons en plus de ce que Geoff a énuméré:

  • Il est beaucoup plus facile de s'interfacer avec des programmes et bibliothèques externes en Python. Plus de fichiers mex!

  • Si vous êtes loin de votre bureau, il est beaucoup plus facile de faire fonctionner Python + NumPy / SciPy que d'avoir accès à une licence Matlab.

  • La raison principale pour laquelle Matlab est plus rapide que NumPy est qu'il regroupe des bibliothèques de fournisseurs optimisées pour l'algèbre linéaire (MKL, ACML). Il est possible ( si un peu fastidieux ) de construire votre propre NumPy et de le lier avec les mêmes bibliothèques pour obtenir presque les mêmes performances (et multithreading) que Matlab pour l'algèbre linéaire, plus les meilleures performances de Python pour tout le reste. (Bien que cela nécessite bien sûr une licence même pour un usage académique, annulant ainsi le bonus de logiciel gratuit, c'est toujours une option intéressante pour avoir le même code fonctionnant sur une installation accélérée parrainée par l'employeur au bureau ainsi que sur une étagère standard installer sur votre ordinateur ou ordinateur portable.)

  • Alors que les boîtes à outils de Matlab sont l'un de ses arguments de vente, il existe quelques domaines où Python est en avance; en particulier, SymPy et FEniCS ont largement dépassé les boîtes à outils Symbolique et PDE.

  • N'oubliez pas la partie amusante ( malgré les espaces sémantiques et la liaison de noms ): j'ai vu plusieurs collègues se faire mordre par le bug Python, et il y a vraiment quelque chose d'étrangement satisfaisant dans l'écriture de votre algorithme en Python qui n'est pas là dans Matlab ( bien que cela puisse être la joie d'apprendre une langue étrangère) :)

(Si vous commencez avec NumPy, cette page pourrait vous être utile.)


5

Python peut remplacer à la fois c ++ et Matlab. Il est bien répandu dans les universités et l'industrie. Dans l'industrie, il est parfois utilisé comme colle pour les langages de niveau inférieur, principalement c / c ++. Mathematica est une toute autre histoire. Son principal avantage est là où tous les autres mentionnés (c / c ++; Matlab; Python) ne sont pas bons: dans les calculs symboliques.

Ainsi, les quatre sont complètement différents: c ++ est un langage de programmation de niveau relativement bas ancien et stable; Python est un langage informatique de haut niveau nouveau et évolutif; Matlab est un environnement de calcul numérique avec un fort accent sur l'algèbre vectorielle (bien qu'il soit capable de faire plus ou moins tout); Mathematica est un système d'algèbre informatique avec un fort accent sur les calculs symboliques (la même remarque qu'avec matlab). Ce ne sont donc pas des concurrents.


En effet; Je suis souvent perplexe (et parfois étonné) quand je vois des gens utiliser Mathematica pour le calcul scientifique ...
Christian Clason

@ChristianClason et Misha: c'est une idée fausse que Mathematica est principalement un système d'algèbre informatique. Si vous regardez comment les gens l'utilisent réellement , la plupart n'est pas de l'algèbre symbolique, et dans plusieurs domaines numériques, il est compétitif avec des outils comme MATLAB et R. (Personnellement, je choisirais Mma plutôt que ces deux autres pour la plupart des tâches de traitement de données numériques , mais c'est bien sûr une préférence personnelle.) Dans certains domaines, comme l'intégration numérique ou la visualisation, il semble être en avance sur MATLAB. Dans d'autres, comme la résolution de PDE, c'est loin derrière.
Szabolcs

Pour quelqu'un dont le seul intérêt est le calcul numérique, Python est une alternative à MATLAB qui est un langage de niveau relativement élevé qui est similaire dans sa capacité à utiliser des routines de bibliothèque pour gérer des calculs standardisés impliquant l'algèbre linéaire, les transformées de Fourier, les fonctions spéciales, etc. Oui, Python est beaucoup plus largement applicable, mais il couvre tout ce que vous pourriez faire dans MATLAB.
Brian Borchers

4

Je sais que votre question concerne l'utilisation du python, mais vous avez dit que vous étiez intéressé par "l'analyse numérique ou la probabilité". Je ne sais pas si vous avez envisagé R , mais il est spécialement conçu pour ce genre de travail. R est un langage très puissant pour les probabilités et les statistiques, et dispose d'une base d'utilisateurs très importante et active de mathématiciens et de scientifiques.

R est différent de Matlab dans le sens où il est open-source, a un focus statistique et fait des tracés très impressionnants (voir ggplot2 ). Vous pouvez faire presque tout en R que vous pouvez faire dans Matlab, mais mon aspect préféré est la contribution de l'utilisateur. La plupart des bibliothèques apportées sont écrites par des scientifiques et publiées dans une revue statistique. Ils ont également des guides extrêmement bien écrits (appelés références et vignettes). Ma nouvelle bibliothèque préférée offre un support CUDA basé sur les bibliothèques CULA (gratuit pour un usage académique). Il existe également une quantité prodigieuse de méthodes pour la théorie des probabilités (voir ici ).

Quoi qu'il en soit, R est définitivement conçu spécifiquement pour votre domaine de travail, alors vérifiez-le et envisagez de l'ajouter à votre boîte à outils :) N'oubliez pas, vous pouvez exécuter des scripts R dans Python et des scripts Python dans R, et capturer facilement les sorties.

Bonne chance!


2

D'autres ont déjà commenté longuement et plus en profondeur que ce que j'essaierai ici. Cependant, je voudrais souligner une fois de plus: cela dépend de votre communauté. Par exemple, si vous travaillez sur un projet d'ingénierie électrique, il est probable que vous utiliserez matlab; la même chose peut être vraie si vous êtes un analyste numérique souhaitant vérifier votre estimation du taux de convergence sur un problème de modèle simple.

D'autre part, si vous êtes dans le calcul scientifique proprement dit (par exemple, simuler l'écoulement autour d'un profil aérodynamique, simuler la fusion nucléaire dans un plasma, simuler la convection dans le manteau terrestre) ou développer des méthodes numériques avec de telles applications à l'esprit, alors le lingua franca est C ++. Chaque progiciel de calcul scientifique à grande échelle est aujourd'hui écrit en C ++ (ou C), pour le meilleur ou pour le pire, et c'est ainsi qu'il va rester longtemps. Pour ne citer que quelques exemples, PETSc et les packages Trilinos incroyablement grands et diversifiés sont écrits en C et C ++, respectivement. Parmi les grandes bibliothèques d'éléments finis open source auxquelles je peux penser (libMesh, deal.II, oofem, freefem), chacune est écrite en C ++. Parmi les programmes de visualisation, les deux plus grands (Visit et Paraview) sont écrits en C ++. Je pourrais étendre la liste.

Le fait est que si vous vous contentez de simulations à petite échelle, les gens utilisent une seule langue, mais quand il s'agit de calculs sérieux, peut-être parallèles, ils utilisent tous autre chose. C'est une chose communautaire à coup sûr, mais aussi avec l'interopérabilité - si PETSc et Trilinos sont écrits en C et C ++, alors je (en tant qu'auteur de deal.II) ne peux pas facilement choisir une autre langue même si je le voulais parce que Je dois travailler avec PETSc et Trilinos.


1
Pour être honnête, il y a beaucoup d' utilisateurs PETSc venant de Fortran, et pas mal de Python. C est facile à appeler depuis presque n'importe quelle langue, bien que la programmation en plusieurs langues comporte son propre ensemble de défis et je ne le recommande pas très souvent. La question de l'emplacement de la pile dans votre code est également trop souvent ignorée. Les applications des utilisateurs finaux doivent faire des choix de conception de logiciels différents de ceux des bibliothèques de niveau système, par exemple.
Jed Brown

C'est juste. Mais il est néanmoins vrai que les instances les plus récentes de logiciels utilisés dans les calculs à grande échelle sont écrasées de manière écrasante en C et C ++ de nos jours (malgré les anciens documents écrits en Fortran).
Wolfgang Bangerth

1

Pour ajouter mes deux cents, j'ai eu à la fois une expérience universitaire récente (un nouveau diplômé du doctorat :)) et une expérience dans l'industrie (un fabricant d'équipement d'arpentage).

Nous effectuons de nombreux calculs numériques sur des processeurs embarqués faibles (pensez aux processeurs pour téléphones portables). En dehors de l'absence de MATLAB pour ARM, C ++ est roi dans ce monde - de nombreuses suites de compilateurs intégrés n'incluent pas FORTAN!

Bien que nous ayons un nombre limité de licences MATLAB, l'exigence de faire un produit consommant 2 watts de puissance biaise notre travail de développement en faveur du C ++, (à côté de l'expérimentation).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.