MATLAB est-il plus rapide que Python?

je veux calculer les champs magnétiques de certains conducteurs en utilisant la loi Biot–Savart et je veux utiliser une matrice 1000x1000x1000. Avant D'utiliser MATLAB, mais maintenant je veux utiliser Python. Python est-il plus lent que MATLAB ? Comment rendre Python plus rapide?

EDIT: Peut-être la meilleure façon de calculer le grand tableau avec C/C++, puis transfert à Python. Je veux visualiser alors avec VPython .

EDIT2: Quel est le meilleur dans mon cas: C ou C++?

34
demandé sur Peter Mortensen 2010-01-25 17:47:42

8 réponses

vous pouvez trouver des résultats utiles à la fin de ce lien ""

http://wiki.scipy.org/PerformancePython

à Partir de l'introduction,

Une comparaison de tisser avec NumPy, Pyrex, Psyco, Fortran (77 et 90) et C++ pour la résolution de Laplace de l'équation.

il compare également MATLAB et semble montrer des vitesses similaires à lors de L'utilisation de Python et NumPy .

bien sûr, ce n'est qu'un exemple spécifique, votre application pourrait permettre des performances meilleures ou pires. Il n'y a pas de mal à faire le même test sur les deux et à comparer.

vous pouvez également compiler NumPy avec des bibliothèques optimisées telles que ATLAS qui fournit quelques routines BLAS / LAPACK . Ceux-ci doivent être d'une vitesse comparable à celle du MATLAB.

Je ne suis pas sûr que les téléchargements de NumPy soient déjà construits contre, mais je pense QU'ATLAS ajustera les bibliothèques à votre système Si vous compilez NumPy,

http://www.scipy.org/Installing_SciPy/Windows

le lien a plus de détails sur ce qui est requis sous la plate-forme Windows.

EDIT:

Si vous voulez savoir ce qui fonctionne mieux, C ou C++, il pourrait être ça vaut la peine de poser une nouvelle question. Bien que du lien ci-dessus C++ ait la meilleure performance. D'autres solutions sont également assez proches: Pyrex, Python/Fortran (utilisant f2py) et inline C++.

la seule algèbre matricielle sous C++ que j'ai jamais faite a été l'utilisation de MTL et la mise en œuvre d'un filtre Kalman étendu. Je suppose, cependant, dans l'essence, cela dépend des bibliothèques que vous utilisez LAPACK/BLAS et comment il est bien optimisé.

ce lien a un liste des paquets numériques orientés objet pour de nombreuses langues.

http://www.oonumerics.org/oon /

27
répondu petantik 2013-07-10 03:14:26

NumPy et MATLAB utilisent tous deux une implémentation sous-jacente BLAS pour les opérations d'algèbre linéaire standard. Pendant un certain temps tous les deux utilisé ATLAS , mais AUJOURD'hui MATLAB apparemment vient aussi avec D'autres implémentations comme Intel bibliothèque de noyau de mathématiques (MKL). Celui qui est le plus rapide dépend dans quelle mesure du système et de la façon dont la mise en œuvre de BLAS a été compilée. Vous pouvez également compiler NumPy avec MKL et Enthought travaille sur le support MKL pour leur distribution Python (voir leur roadmap ). Voici également un récent intéressant billet de blog à ce sujet.

d'autre part, si vous avez besoin d'opérations plus spécialisées ou de structures de données, alors Python et MATLAB vous offrent différents moyens d'optimisation (comme Cython , PyCUDA ,...).

Edit: j'ai corrigé cette réponse pour tenir compte des différentes implémentations de BLAS. J'espère qu'il s'agit maintenant d'une représentation équitable de la situation actuelle.

18
répondu nikow 2011-02-03 18:14:31

le seul test valide est de le comparer. Cela dépend vraiment de ce qu'est votre plate-forme, et de la façon dont la loi Biot-Savart correspond aux opérations intégrées de Matlab ou de NumPy/SciPy.

quant à rendre Python plus rapide, Google travaille sur Unladen Swallow, un compilateur JIT pour Python. Il y a probablement d'autres projets de ce genre.

7
répondu Mike DeSimone 2010-01-25 14:51:05

selon votre édition 2, je vous recommande fortement D'utiliser Fortran car vous pouvez utiliser les sous-programmes disponibles en algèbre linéaire (Lapack et Blas) et c'est beaucoup plus simple que C/C++ pour les calculs matriciels.

si vous préférez utiliser une approche C/C++, j'utiliserais C, parce que vous avez probablement besoin de performances brutes sur une interface probablement simple (les calculs matriciels ont tendance à avoir des interfaces simples et des algorithmes complexes).

si, cependant, vous décidez d'utiliser C++, vous pouvez utiliser le TNT (le template Numerical Toolkit, l'implémentation C++ de Lapack).

bonne chance.

4
répondu Escualo 2010-01-26 00:38:02

si vous n'utilisez que Python (avec NumPy), cela peut être plus lent, en fonction des pièces que vous utilisez, que vous ayez ou non installé des bibliothèques d'algèbre linéaire optimisées, et de la façon dont vous savez tirer profit de NumPy.

Pour le rendre plus rapide, il ya quelques choses que vous pouvez faire. Il existe un outil appelé Cython qui vous permet d'ajouter des déclarations de type au code Python et de les traduire dans un module d'extension Python en C. cela dépend un peu de votre diligence avec vos déclarations de type - si vous n'en ajoutez pas du tout, vous ne verrez pas beaucoup d'avantages. Cython a également le support pour les types NumPy, bien que ceux-ci soient un peu plus compliqués que les autres types.

si vous avez une bonne carte graphique et êtes prêt à en apprendre un peu sur L'informatique GPU, PyCUDA peut également aider. (Si vous n'avez pas de carte graphique nvidia, j'ai entendu dire qu'il y a aussi un PyOpenCL en cours). Je ne connais pas votre domaine de problèmes, mais s'il peut être mappé dans un problème CUDA alors il devrait être capable de gérer vos éléments 10^9 correctement.

3
répondu kwatford 2010-01-25 15:45:09

et voici une mise à jour" comparaison "entre MATLAB et NumPy / MKL basé sur certaines fonctions algébriques linéaires:

http://dpinte.wordpress.com/2010/03/16/numpymkl-vs-matlab-performance /

Le produit scalaire n'est pas lent ;-)

2
répondu Peter Mortensen 2011-02-03 18:16:47

je tiens aussi à souligner que Python (+NumPy) peut facilement se connecter avec Fortran via le module F2Py, qui vous permet d'obtenir des vitesses de Fortran natives sur les morceaux de code que vous y déchargez.

0
répondu Connor Glosser 2010-03-13 03:41:54

Je n'ai pas pu trouver beaucoup de nombres difficiles pour répondre à cette même question donc je suis allé de l'avant et fait les tests moi-même. Les résultats, les scripts et les ensembles de données utilisés sont tous disponibles ici sur mon post sur MATLAB vs Python speed for vibration analysis .

pour faire court, la fonction FFT dans MATLAB est meilleure que Python mais vous pouvez faire quelques manipulations simples pour obtenir des résultats comparables et de la vitesse. J'ai également constaté que l'importation de données était plus rapide en Python comparé à MATLAB (même pour les fichiers MAT en utilisant le scipy.io).

0
répondu Steve 2016-08-23 17:35:02