Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
python23 testPerf.py
for .. in 1.22099995613
python2.4 testPerf.py
for .. in 0.641000032425
python23 testPerf.py
# sans fonction
python23 testPerf.py
# dans une fonction
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
python23 testPerf.py
for .. in 1.22099995613
python2.4 testPerf.py
for .. in 0.641000032425
python23 testPerf.py
# sans fonction
python23 testPerf.py
# dans une fonction
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
python23 testPerf.py
for .. in 1.22099995613
python2.4 testPerf.py
for .. in 0.641000032425
python23 testPerf.py
# sans fonction
python23 testPerf.py
# dans une fonction
Je ne sais pas comment cela fonctionne en interne mais les résultats
sont à relativiser avec les optimisations récentes :python23 testPerf.py
for .. in 1.22099995613
map + lambda 1.03200006485
for .. in xrange 1.07100009918
map + lambda xrange 0.911999940872python2.4 testPerf.py
for .. in 0.641000032425
map + lambda 1.03200006485
for .. in xrange 0.520999908447
map + lambda xrange 0.921000003815
Je ne sais pas comment cela fonctionne en interne mais les résultats
sont à relativiser avec les optimisations récentes :
python23 testPerf.py
for .. in 1.22099995613
map + lambda 1.03200006485
for .. in xrange 1.07100009918
map + lambda xrange 0.911999940872
python2.4 testPerf.py
for .. in 0.641000032425
map + lambda 1.03200006485
for .. in xrange 0.520999908447
map + lambda xrange 0.921000003815
Je ne sais pas comment cela fonctionne en interne mais les résultats
sont à relativiser avec les optimisations récentes :python23 testPerf.py
for .. in 1.22099995613
map + lambda 1.03200006485
for .. in xrange 1.07100009918
map + lambda xrange 0.911999940872python2.4 testPerf.py
for .. in 0.641000032425
map + lambda 1.03200006485
for .. in xrange 0.520999908447
map + lambda xrange 0.921000003815
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
"""
import time
Oulala on est mal parti
start, end =0 , 0
start = time.time()
[a for a in range(10**6)]
Là il y a création d'une liste d'un million d'entiers successifs
end = time.time()
print "for .. int" , end - start
start, end = 0 , 0
start = time.time()
map(lambda a : a, range(10**6))
Ici la liste est créée par map (map codé en C mais passage par un appel
end = time.time()
print "map + lambdat" , end - start
"""
qui me donne ce genre de resultat :
for .. in 0.858999967575
map + lambda 0.594000101089
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
Comme quoi en utilisant les mauvais outils et en ne sachant pas ce que
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
merci d'avance pour vos explications,
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
"""
import time
Oulala on est mal parti
start, end =0 , 0
start = time.time()
[a for a in range(10**6)]
Là il y a création d'une liste d'un million d'entiers successifs
end = time.time()
print "for .. int" , end - start
start, end = 0 , 0
start = time.time()
map(lambda a : a, range(10**6))
Ici la liste est créée par map (map codé en C mais passage par un appel
end = time.time()
print "map + lambdat" , end - start
"""
qui me donne ce genre de resultat :
for .. in 0.858999967575
map + lambda 0.594000101089
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
Comme quoi en utilisant les mauvais outils et en ne sachant pas ce que
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
merci d'avance pour vos explications,
Bonjour,
suite au post de Christophe du 10/03 18:58,
je me suis amuse a comparer les perf de map+lambda et for...in
avec le script suivant :
"""
import time
Oulala on est mal parti
start, end =0 , 0
start = time.time()
[a for a in range(10**6)]
Là il y a création d'une liste d'un million d'entiers successifs
end = time.time()
print "for .. int" , end - start
start, end = 0 , 0
start = time.time()
map(lambda a : a, range(10**6))
Ici la liste est créée par map (map codé en C mais passage par un appel
end = time.time()
print "map + lambdat" , end - start
"""
qui me donne ce genre de resultat :
for .. in 0.858999967575
map + lambda 0.594000101089
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
Comme quoi en utilisant les mauvais outils et en ne sachant pas ce que
super... mais comment cela se fait il ???
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
merci d'avance pour vos explications,
sais tu comment fonctionne for in ???
Eric
non... mais je veux bien de l'info sur le sujet :)
sais tu comment fonctionne for in ???
Eric
non... mais je veux bien de l'info sur le sujet :)
sais tu comment fonctionne for in ???
Eric
non... mais je veux bien de l'info sur le sujet :)
SL wrote:
...
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
Tu ne fais pas plus appel à range dans un cas que dans l'autre.
D'ailleurs Python n'a besoin de ne le calculer qu'une fois, serait-ce
une constante littérale ?
je fais reference a la fonction lambda ... pas a la fonction range.
Ton bench ne me paraît pas des plus fiables quoiqu'il arrive.
SL wrote:
...
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
Tu ne fais pas plus appel à range dans un cas que dans l'autre.
D'ailleurs Python n'a besoin de ne le calculer qu'une fois, serait-ce
une constante littérale ?
je fais reference a la fonction lambda ... pas a la fonction range.
Ton bench ne me paraît pas des plus fiables quoiqu'il arrive.
SL wrote:
...
j'aurais plutot misé sur for...in, vu qu'il n'y a pas d'appel de
fonction a chaque iteration... :-?
Tu ne fais pas plus appel à range dans un cas que dans l'autre.
D'ailleurs Python n'a besoin de ne le calculer qu'une fois, serait-ce
une constante littérale ?
je fais reference a la fonction lambda ... pas a la fonction range.
Ton bench ne me paraît pas des plus fiables quoiqu'il arrive.
Je ne sais pas comment cela fonctionne en interne mais les résultats
sont à relativiser avec les optimisations récentes :python23 testPerf.py
for .. in 1.22099995613
map + lambda 1.03200006485
for .. in xrange 1.07100009918
map + lambda xrange 0.911999940872python2.4 testPerf.py
for .. in 0.641000032425
map + lambda 1.03200006485
for .. in xrange 0.520999908447
map + lambda xrange 0.921000003815
en effet...
Bref, encore une fois, prenez ce que vous préférez lire... ;-)
N'oubliez pas non plus les "generator expressions" avec python 2.4.
(http://www.python.org/peps/pep-0289.html)
merci pour l'info,
Pour les curieux qui ce demande si psyco peut quelque chose ici, réponse
non sauf si c'est dans une fonction et avec le for ... in :
kesako psyco ?
python23 testPerf.py
# sans fonction
for .. in 1.42199993134
map + lambda 2.09300017357
for .. in xrange 1.33200001717
map + lambda xrange 1.96299982071python23 testPerf.py
# dans une fonction
for .. in 0.761999845505
map + lambda 2.58300018311
for .. in xrange 0.780999898911
map + lambda xrange 2.57400012016
je ne comprends pas... ?
Conclusion :
Il n'y en a pas !
ca ok, je comprends :)
Je ne sais pas comment cela fonctionne en interne mais les résultats
sont à relativiser avec les optimisations récentes :
python23 testPerf.py
for .. in 1.22099995613
map + lambda 1.03200006485
for .. in xrange 1.07100009918
map + lambda xrange 0.911999940872
python2.4 testPerf.py
for .. in 0.641000032425
map + lambda 1.03200006485
for .. in xrange 0.520999908447
map + lambda xrange 0.921000003815
en effet...
Bref, encore une fois, prenez ce que vous préférez lire... ;-)
N'oubliez pas non plus les "generator expressions" avec python 2.4.
(http://www.python.org/peps/pep-0289.html)
merci pour l'info,
Pour les curieux qui ce demande si psyco peut quelque chose ici, réponse
non sauf si c'est dans une fonction et avec le for ... in :
kesako psyco ?
python23 testPerf.py
# sans fonction
for .. in 1.42199993134
map + lambda 2.09300017357
for .. in xrange 1.33200001717
map + lambda xrange 1.96299982071
python23 testPerf.py
# dans une fonction
for .. in 0.761999845505
map + lambda 2.58300018311
for .. in xrange 0.780999898911
map + lambda xrange 2.57400012016
je ne comprends pas... ?
Conclusion :
Il n'y en a pas !
ca ok, je comprends :)
Je ne sais pas comment cela fonctionne en interne mais les résultats
sont à relativiser avec les optimisations récentes :python23 testPerf.py
for .. in 1.22099995613
map + lambda 1.03200006485
for .. in xrange 1.07100009918
map + lambda xrange 0.911999940872python2.4 testPerf.py
for .. in 0.641000032425
map + lambda 1.03200006485
for .. in xrange 0.520999908447
map + lambda xrange 0.921000003815
en effet...
Bref, encore une fois, prenez ce que vous préférez lire... ;-)
N'oubliez pas non plus les "generator expressions" avec python 2.4.
(http://www.python.org/peps/pep-0289.html)
merci pour l'info,
Pour les curieux qui ce demande si psyco peut quelque chose ici, réponse
non sauf si c'est dans une fonction et avec le for ... in :
kesako psyco ?
python23 testPerf.py
# sans fonction
for .. in 1.42199993134
map + lambda 2.09300017357
for .. in xrange 1.33200001717
map + lambda xrange 1.96299982071python23 testPerf.py
# dans une fonction
for .. in 0.761999845505
map + lambda 2.58300018311
for .. in xrange 0.780999898911
map + lambda xrange 2.57400012016
je ne comprends pas... ?
Conclusion :
Il n'y en a pas !
ca ok, je comprends :)
import time
Oulala on est mal parti
:)
Là il y a création d'une liste d'un million d'entiers successifs
puis utlisation du mécanisme "list compréhension" d'une nouvelle liste
d'un million d'entiers
ok, bon faut que je comprehende cette histoire de list comprehension...
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
Comme quoi en utilisant les mauvais outils et en ne sachant pas ce que
l'on compte on arrive à des résultats faux (voir à la fin)
c'est pas ce que je comprends, j'ai fait mon 'test' avec python 2.3.3.
Essais avec python2.4 sur un pentium III biprocesseur 1400MHz
j'aime bien le 'UN' pentium bi-pro ;)
Si vous voulez tester la rapidité de for .. in il faut écrire un bloc
"pass" :
python2.4 -m timeit -s 'grosR = range(10**6)' 'for i in grosR: pass'
10 loops, best of 3: 136 msec per loop
Il me semble que map + lambda est un peu largué :)
en effet ... mais on ne teste plus du tout la meme chose...
Tentaive de sauver la face pour map : (par rapport à une list comp)
python2.4 -m timeit -s 'grosR = xrange(10**6)' 'map(int, grosR)'
10 loops, best of 3: 685 msec per loop
python2.4 -m timeit -s 'grosR = range(10**6)' 'map(int, grosR)'
10 loops, best of 3: 645 msec per loop
L'objectif est loin d'être atteint!
ben oui mais la tu fais une conversion int->int en plus.
Il y a eu récemment sur comp.lang.python je crois un message donnant la
manière la plus rapide de créer une liste (dont on connaît le nombre
d'éléments souhaités) :
python2.4 -m timeit '[ None] * 10**6'
10 loops, best of 3: 46.1 msec per loop
Comme par hasard c'est la manière la plus simple à écrire.
Le champion ici:
python2.4 -m timeit 'lst=[ None] * 10**6'
10 loops, best of 3: 44.9 msec per loop
le fait d'affecter la liste a une variable nous fait gagner en perf ?
En conclusion :
- pour tester la performance, utilisez le module timeit
- la création d'une grande liste n'est pas gratuite
- les appels de fonction sont coûteux en python ce qui handicape "map"
dans un test de performance d'itération (mais "map" fait beaucoup plus
que les autres solutions)
- les boucles for sont relativement optimisées et les list
comprehesion sont optimisées : cs de trois fois plus lente qu'une
boucle vide.
- le module itertools n'est pas à négliger (possibilité de limiter la
place mémoire demandée).
et merci pour ces conclusions/infos tres interessantes.
import time
Oulala on est mal parti
:)
Là il y a création d'une liste d'un million d'entiers successifs
puis utlisation du mécanisme "list compréhension" d'une nouvelle liste
d'un million d'entiers
ok, bon faut que je comprehende cette histoire de list comprehension...
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
Comme quoi en utilisant les mauvais outils et en ne sachant pas ce que
l'on compte on arrive à des résultats faux (voir à la fin)
c'est pas ce que je comprends, j'ai fait mon 'test' avec python 2.3.3.
Essais avec python2.4 sur un pentium III biprocesseur 1400MHz
j'aime bien le 'UN' pentium bi-pro ;)
Si vous voulez tester la rapidité de for .. in il faut écrire un bloc
"pass" :
python2.4 -m timeit -s 'grosR = range(10**6)' 'for i in grosR: pass'
10 loops, best of 3: 136 msec per loop
Il me semble que map + lambda est un peu largué :)
en effet ... mais on ne teste plus du tout la meme chose...
Tentaive de sauver la face pour map : (par rapport à une list comp)
python2.4 -m timeit -s 'grosR = xrange(10**6)' 'map(int, grosR)'
10 loops, best of 3: 685 msec per loop
python2.4 -m timeit -s 'grosR = range(10**6)' 'map(int, grosR)'
10 loops, best of 3: 645 msec per loop
L'objectif est loin d'être atteint!
ben oui mais la tu fais une conversion int->int en plus.
Il y a eu récemment sur comp.lang.python je crois un message donnant la
manière la plus rapide de créer une liste (dont on connaît le nombre
d'éléments souhaités) :
python2.4 -m timeit '[ None] * 10**6'
10 loops, best of 3: 46.1 msec per loop
Comme par hasard c'est la manière la plus simple à écrire.
Le champion ici:
python2.4 -m timeit 'lst=[ None] * 10**6'
10 loops, best of 3: 44.9 msec per loop
le fait d'affecter la liste a une variable nous fait gagner en perf ?
En conclusion :
- pour tester la performance, utilisez le module timeit
- la création d'une grande liste n'est pas gratuite
- les appels de fonction sont coûteux en python ce qui handicape "map"
dans un test de performance d'itération (mais "map" fait beaucoup plus
que les autres solutions)
- les boucles for sont relativement optimisées et les list
comprehesion sont optimisées : cs de trois fois plus lente qu'une
boucle vide.
- le module itertools n'est pas à négliger (possibilité de limiter la
place mémoire demandée).
et merci pour ces conclusions/infos tres interessantes.
import time
Oulala on est mal parti
:)
Là il y a création d'une liste d'un million d'entiers successifs
puis utlisation du mécanisme "list compréhension" d'une nouvelle liste
d'un million d'entiers
ok, bon faut que je comprehende cette histoire de list comprehension...
comme quoi map+lambda est sensiblement plus rapide pour parcourir et
traiter une liste.
Comme quoi en utilisant les mauvais outils et en ne sachant pas ce que
l'on compte on arrive à des résultats faux (voir à la fin)
c'est pas ce que je comprends, j'ai fait mon 'test' avec python 2.3.3.
Essais avec python2.4 sur un pentium III biprocesseur 1400MHz
j'aime bien le 'UN' pentium bi-pro ;)
Si vous voulez tester la rapidité de for .. in il faut écrire un bloc
"pass" :
python2.4 -m timeit -s 'grosR = range(10**6)' 'for i in grosR: pass'
10 loops, best of 3: 136 msec per loop
Il me semble que map + lambda est un peu largué :)
en effet ... mais on ne teste plus du tout la meme chose...
Tentaive de sauver la face pour map : (par rapport à une list comp)
python2.4 -m timeit -s 'grosR = xrange(10**6)' 'map(int, grosR)'
10 loops, best of 3: 685 msec per loop
python2.4 -m timeit -s 'grosR = range(10**6)' 'map(int, grosR)'
10 loops, best of 3: 645 msec per loop
L'objectif est loin d'être atteint!
ben oui mais la tu fais une conversion int->int en plus.
Il y a eu récemment sur comp.lang.python je crois un message donnant la
manière la plus rapide de créer une liste (dont on connaît le nombre
d'éléments souhaités) :
python2.4 -m timeit '[ None] * 10**6'
10 loops, best of 3: 46.1 msec per loop
Comme par hasard c'est la manière la plus simple à écrire.
Le champion ici:
python2.4 -m timeit 'lst=[ None] * 10**6'
10 loops, best of 3: 44.9 msec per loop
le fait d'affecter la liste a une variable nous fait gagner en perf ?
En conclusion :
- pour tester la performance, utilisez le module timeit
- la création d'une grande liste n'est pas gratuite
- les appels de fonction sont coûteux en python ce qui handicape "map"
dans un test de performance d'itération (mais "map" fait beaucoup plus
que les autres solutions)
- les boucles for sont relativement optimisées et les list
comprehesion sont optimisées : cs de trois fois plus lente qu'une
boucle vide.
- le module itertools n'est pas à négliger (possibilité de limiter la
place mémoire demandée).
et merci pour ces conclusions/infos tres interessantes.
Yermat wrote:[...]
Pour les curieux qui ce demande si psyco peut quelque chose ici,
réponse non sauf si c'est dans une fonction et avec le for ... in :
kesako psyco ?
Yermat wrote:
[...]
Pour les curieux qui ce demande si psyco peut quelque chose ici,
réponse non sauf si c'est dans une fonction et avec le for ... in :
kesako psyco ?
Yermat wrote:[...]
Pour les curieux qui ce demande si psyco peut quelque chose ici,
réponse non sauf si c'est dans une fonction et avec le for ... in :
kesako psyco ?