1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| from operator import mul
from time import clock
from random import random,randint
from timeit import Timer
def prod1(L):
x=1
for e in L:
x*=e
return x
def prod2(z):
return reduce(lambda x,y:x*y,z,1)
def prod3(z):
return reduce(mul,z,1)
print '\n==================================================================================='
for taille in [10,50,100,200,400,700,800,1000]:
L = [randint(9807,10200)/10000. for i in xrange(taille)]
print '\nListe de reels L = [randint(9807,10200)/10000. for i in xrange('+str(taille)+')]'
print '---------------------------------------------------------------'+len(str(taille))*'*'+'--\n'
print 'Avec clock()'
iterat = 10
sta,stb,stc = 0,0,0
for i in xrange(iterat):
t = time.clock()
a = prod1(L)
sta += time.clock()-t
t = time.clock()
b = prod2(L)
stb += time.clock()-t
t = time.clock()
c = prod3(L)
stc += time.clock()-t
print sta,' iterative ',iterat,'tours'
print stb,' reduce lambda'
print stc,' reduce mul'
print 'reduce_mul/reduce_lambda',stc/stb,' reduce_mul/iterative',stc/sta
print 'Resultat :',a
print
print 'Avec Timer'
for u in xrange(6):
t1 = Timer('prod1(L)','from __main__ import prod1,L').timeit(iterat)
t2 = Timer('prod2(L)','from __main__ import prod2,L').timeit(iterat)
t3 = Timer('prod3(L)','from __main__ import prod3,L').timeit(iterat)
print t1,' iterative '+str(iterat)+' tours'
print t2,' reduce lambda'
print t3,' reduce mul'
print 'reduce_mul/reduce_lambda',t3/t2,' reduce_mul/iterative',t3/t1
print '\n==================================================================================='
for taille in [100,500,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,20000,50000]:
L = [randint(1,101) for i in xrange(taille)]
print "\n\nListe d'entiers L = [randint(1,12) for i in xrange("+str(taille)+')]'
print '---------------------------------------------------'+len(str(taille))*'*'+'--'
iterat = 10
sta,stb,stc = 0,0,0
for i in xrange(iterat):
t = time.clock()
a = prod1(L)
sta += time.clock()-t
t = time.clock()
b = prod2(L)
stb += time.clock()-t
t = time.clock()
c = prod3(L)
stc += time.clock()-t
print sta,' iterative ',iterat,'tours'
print stb,' reduce lambda'
print stc,' reduce mul'
print 'reduce_mul/reduce_lambda',stc/stb,' reduce_mul/iterative',stc/sta
print '\nlongueur du produit :',len(str(a))
print
t1 = Timer('prod1(L)','from __main__ import prod1,L').timeit(iterat)
t2 = Timer('prod2(L)','from __main__ import prod2,L').timeit(iterat)
t3 = Timer('prod3(L)','from __main__ import prod3,L').timeit(iterat)
print t1,' iterative '+str(iterat)+' tours'
print t2,' reduce lambda'
print t3,' reduce mul'
print 'reduce_mul/reduce_lambda',t3/t2,' reduce_mul/iterative',t3/t1
print '-----------------------------------------------------------------------------------' |