Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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 !

10 réponses

1 2
Avatar
Loïc Joly
Christophe wrote:

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.


Et donc ne représente pas du tout du code pour Matlab classique.
L'intérêt de Matlab, ou de fortran, que je classe dans la même
catégorie, est d'avoir en pré câblé (et a priori donc optimisé) un grand
nombre de fonctions numériques de base. Comparer ces langage sur ce
qu'ils ne sont pas sensé faire n'est pas très "fair play".

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 !


D'après d'autres posts sur ce groupe, il est possible de gagner pas mal
pour ce genre de code un utilisant psycho.

--
Loïc

Avatar
bruno modulix
(snip)
D'après d'autres posts sur ce groupe, il est possible de gagner pas mal
pour ce genre de code un utilisant psycho.


s/psycho/psyco/

Avatar
Michel Claveau, résurectionné d'outre-bombe informatique
Psssiiit !

Ne serait-il pas psychotique de parler de psycho pour psyco ?

;o)
Avatar
Loïc Joly
Michel Claveau, résurectionné d'outre-bombe informatique wrote:

Psssiiit !

Ne serait-il pas psychotique de parler de psycho pour psyco ?

;o)


En fait, je pense qu'il sagit plutôt du fait d'un individu qui parle de
ce qu'il ne connait pas, et recopie bêtement les fautes d'orthographe
qu'il a lu dans les articles précédents.

Ce comportement est totalement dépravé, merci de l'avoir corrigé ! ;)

--
Loïc

Avatar
Marc
As-tu essayé Scilab ?
http://scilabsoft.inria.fr/
Marc

Christophe wrote:

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 !


Avatar
Michel Claveau, résurectionné d'outre-bombe informatique
Bonsoir !

Je trouve que es dur, avec le bétail... ;o()

Perso, j'ai tenté d'utiliser psyco. Mes premiers tests n'ont fait apparaître
aucun gain. Ensuite, je me suis aperçu que psyco travaillait mieux, dans
certaines circonstances. Plus il y avait de niveaux d'appels de fonctions,
plus on gagnait.

Toutefois, je n'ai pratiquement jamais eu d'augmentation de vitesse de plus
de 30 %.

En plus, j'ai eu des cas, où psyco provoquait des erreurs aléatoires (une
histoire de gestion de sockets, qui provoquait, de temps en temps, des
erreurs avec psyco ; ces erreurs disparaissant, lorsque psyco était
désactivé, avec quelques '#' ajoutés).

Du coup, je ne l'utilise qu'avec parcimonie...
Avatar
Christophe
On Thu, 29 Jul 2004 21:02:42 +0200, Loïc Joly

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.


Et donc ne représente pas du tout du code pour Matlab classique.
L'intérêt de Matlab, ou de fortran, que je classe dans la même
catégorie, est d'avoir en pré câblé (et a priori donc optimisé) un
grand nombre de fonctions numériques de base. Comparer ces langage sur
ce qu'ils ne sont pas sensé faire n'est pas très "fair play".



Cela dépend : l'idée était de mesurer les performances de l'interpréteur
sur un certain type d'opération que je réalise souvent (i.e. des boucles
avec des opérations à l'intérieur).
Maintenant le fait que Matlab est bien plus performant lorsque tu
"vectorises" tes opérations, ça c'est évident mais ce n'est pas ce que
je voulais tester.

Maintenant l'autre test qui me reste à réaliser est de faire appel dans
les deux cas à la bonne librairie mathématique (A*B sous Matlab, et
dot(A,B) sous Python avec numarray) pour voir les performances des
librairies mathématiques.

Afin d'évaluer chaque langage l'un par rapport à l'autre de manière
objective, ce n'est pas possible comme l'explique la page :
http://www.bagley.org/~doug/shootout/craps.shtml


Avatar
Christophe
On Thu, 29 Jul 2004 22:35:10 +0200, Marc
wrote :

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 !


As-tu essayé Scilab ?
http://scilabsoft.inria.fr/
Marc



Oui et non.
J'avais lu quelques études sur Scilab et Octave qui les comparait à
Matlab. Le résultat ? Scilab et Octave sont des 'clones' libres de
Matlab mais sont encore très loin de l'égaler.
Python en revanche est très loin d'être un simple 'clone' de Matlab et
permet de faire bien plus de choses, c'est pourquoi je m'oriente donc
vers Python même s'il est moins performant en tant que 'clone' de Matlab
que Scilab et Octave...


Avatar
Marc
Perso je me sers de Scilab pour faire des petits calculs rapidement et
profiter du fait que tout est intégré ( en particulier les représentations
graphiques ). Les aspects moins avancés par rapport à Matlab ( que j'ai
utilisé pendant qqs années ) ne me gênent pas. Par contre le fait
d'utiliser un outil que je peux installer où je veux est un plus ( par
rapport à Matlab toujours ) .
Je reconnais cependant que pour des développements plus importants je suis
également attiré par Python parce qu'il est plus "généraliste" ( peut-il
faire plus de choses en calcul ? Je ne sais pas ) et parce qu'il est objet,
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
Avatar
remi_inconnu
...
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.

1 2