2 votes

le python x=x+x est 120 fois plus lent que y=x+x ?! pourquoi ?

J'ai récemment utilisé le module timeit pour effectuer un test de performance très simple du python. Le résultat m'a vraiment stupéfié : le temps consommé par x=x+x Il s'agit de 125 fois de x+x o y=x+x, pourquoi ? ! J'espère vraiment que quelqu'un pourra me donner un indice à ce sujet, peut-être ai-je mal utilisé le timeit ? Merci !

Veuillez noter que y=x+x;x=y est aussi lent que x=x+x mais le x=x+47 est aussi rapide que x+x

testBasicOps()

testcase="pass", time lapse:0.001487secs

testcase="x=47", time lapse:0.002424secs

testcase="x=94", time lapse:0.002423secs

testcase="x=47*2", time lapse:0.002423secs

testcase="x+x", time lapse:0.003922secs

testcase="x*2", time lapse:0.005307secs

testcase="x=x+x", time lapse:0.497974secs

testcase="x=x*2", time lapse:0.727506secs

testcase="x=x+47", time lapse:0.005770secs

testcase="x=47+x", time lapse:0.004442secs

testcase="x+=x", time lapse:0.498920secs

testcase="y=x+x", time lapse:0.004102secs

testcase="y=x*2", time lapse:0.006327secs

testcase="y=x+x

x=y", temps écoulé:0.499644secs

testcase="x+x

y=x", temps écoulé:0.004948secs

testcase="x+x

x=y", temps écoulé:0.005126secs

testcase="y=10

x=y", temps écoulé:0.003351secs

testcase="pass", time lapse:0.001487secs

Le code que j'ai utilisé :

import timeit
import numpy as npy
def testBasicOps():
    timeitSetup="""
x=47
y=0
"""
    testCases=['pass','x=47',\
               'x=94','x=47*2'\
               ,'x+x','x*2'\
               ,'x=x+x','x=x*2'\
               ,'x=x+47','x=47+x'\
               ,'x+=x','y=x+x'\
               ,'y=x*2','y=x+x\nx=y'\
               ,'x+x\ny=x','x+x\nx=y'\
               ,'y=10\nx=y']
    minT=[]
    tests=[]
    for i in testCases:
        tests.append(timeit.Timer(i,setup=timeitSetup))
        minT.append(npy.mean(tests[-1].repeat(10,int(1e5))))
        print 'testcase=\"%s\", time lapse:%fsecs'%(i,minT[-1])

def main():
    print "#"*10
    print "testBasicOps()"
    testBasicOps()

if __name__ == '__main__':
    main()

11voto

casevh Points 4596

Lorsque vous calculez x=x+x plusieurs milliers de fois, x devient un très grand. Vous mesurez le temps qu'il faut pour additionner deux très grands nombres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X