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 !
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
"Christophe" <chris_invalid@yahoo.fr> a écrit dans le message de
news:20040729202246.2de1bbca@linuxcestcomplique...
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.
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
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...
...
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...
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...
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.
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.
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.