OVH Cloud OVH Cloud

Benchmark Python/Matlab

13 réponses
Avatar
Christophe
Bonjour !

Je pense que cela pourrait intéresser plusieurs personnes :

Tout nouveau sur Python et souhaitant l'utiliser pour remplacer Matlab
j'ai essayé de mesurer leur rapidité respectives.
Pour le test j'ai opté pour une simple multiplication de matrices en
boucle :
http://www.bagley.org/~doug/shootout/bench/matrix/

Le source pour python est là :
http://www.bagley.org/~doug/shootout/bench/matrix/matrix.python
Le code pour Matlab est presque strictement identique.

Les résultats sont surprenants :
Python 2.2.3 est 4x plus rapide que Matlab v6.1
Matlab v6.5 est 10x plus rapide que Python
Le C est 35x plus rapide que Matlab v6.5

Apparemment Matlab a pas mal amélioré son interpréteur depuis la
dernière fois...
Bon je vais aussi tester avec le code de multiplication de matrices de
numarray pour voir si cela modifie les résultats (en passant le code de
matrixmultiply est bogué dans la version numarray-1.0 : il transpose le
second argument de temps en temps !).

Ce n'est pas très décevant pour Python (cela reste utilisable) c'est
surtout très étonnant de Matlab !

3 réponses

1 2
Avatar
Gilles Lenfant
"Christophe" a écrit dans le message de
news:
Bonjour !

Je pense que cela pourrait intéresser plusieurs personnes :

Tout nouveau sur Python et souhaitant l'utiliser pour remplacer Matlab
j'ai essayé de mesurer leur rapidité respectives.
Pour le test j'ai opté pour une simple multiplication de matrices en
boucle :
http://www.bagley.org/~doug/shootout/bench/matrix/

Le source pour python est là :
http://www.bagley.org/~doug/shootout/bench/matrix/matrix.python
Le code pour Matlab est presque strictement identique.

Les résultats sont surprenants :
Python 2.2.3 est 4x plus rapide que Matlab v6.1
Matlab v6.5 est 10x plus rapide que Python
Le C est 35x plus rapide que Matlab v6.5

Apparemment Matlab a pas mal amélioré son interpréteur depuis la
dernière fois...
Bon je vais aussi tester avec le code de multiplication de matrices de
numarray pour voir si cela modifie les résultats (en passant le code de
matrixmultiply est bogué dans la version numarray-1.0 : il transpose le
second argument de temps en temps !).

Ce n'est pas très décevant pour Python (cela reste utilisable) c'est
surtout très étonnant de Matlab !


A la limite, on pourrait trouver ça normal. Python n'a pas été conçu pour
concurencer Matlab sur son terrain. De même que Matlab n'a pas pour vocation
d'être un langage/IDE généraliste.

------------
Gilles Lenfant

Avatar
Christophe

...
peut être combiné au C++ ( pour la rapidité). A ce sujet j'ai fait
quelques tests de comparaison du C++ avec Python sur un cas concret
m'intéressant, ce n'est pas ça, j'arrive à un facteur de plusieurs
centaines en rapidité ( avec ou sans psyco ) ce qui est rédhibitoire
pour ce cas précis. Mais moi aussi je débute en Python.
Marc


Si tu as des problèmes de performance, utilise le
profiler de python, tu découvriras certainement les
goulots d'étranglement. Notament les concaténations
de chaînes (que l'on améliore en utilisant StringIO),
la recherche dans les listes (que l'on améliore en
faisant une table d'index à l'aide d'un dictionnaire).

On peut optimiser beaucoup, j'ai réussi une fois
à transformer un traitement d'une heure et demi en
un traitement d'une dizaine de secondes.


A ce sujet, on peut trouver quelque part un site référencant les
principales 'erreurs' à éviter si l'on souhaite avoir un programme en
Python performant ?

Par exemple avec ce que tu viens dire et les "performance tips' situés
sur cette page :
http://www.bagley.org/~doug/shootout/lang/python/

P.S. : Je sais bien que "premature optimization is at the root of all
evil" mais apparemment le facteur temps est assez contraignant avec
Python...


Avatar
Xavier Combelle
Si tu as des problèmes de performance, utilise le
profiler de python, tu découvriras certainement les
goulots d'étranglement. Notament les concaténations
de chaînes (que l'on améliore en utilisant StringIO),
la recherche dans les listes (que l'on améliore en
faisant une table d'index à l'aide d'un dictionnaire).


Je dirais même que python, intégrant des structures de haut niveau au
niveau de la syntaxe (dictionnaire, itérateurs, ... )
est certainement un des langage qui permet le plus facilement
d'implémenter des optimisations d'algorithme.

Par exemple, dans un logiciel C, que j'ai optimisé introduisant un arbre
binaire pour accélérer des recherches, j'ai obtenu un gain d'un facteur
4 en performance (en temps CPU utilisé). Pourtant, il ne s'agissait
pas de la grosse partie du traitement, seulement, une partie qui était
mal conçue.

Le fait de devoir utiliser du C n'a pas influé sur le gain en
performance, par contre au niveau de la facilité d'introduction de
l'optimisation, de la lisibilité du code et du risque de bug, c'est sans
comparaison possible avec ce que j'aurais pu faire en python.

1 2