Ich würde gerne verstehen, warum ich die Geschwindigkeitsunterschiede, die ich sehe, wenn ich Funktionen auf verschiedene Arten komponieren. Ich bin hauptsächlich daran interessiert zu verstehen, warum Fall (1) schneller ist als Fall (2).Python Geschwindigkeit komponierte Funktionen
Danke!
import math
from time import time
def f(x):
return 2*x
def g(x):
return x*x
def h(x):
return math.sqrt(x)
time0 = time()
for x in range(1,10**7):
x_ = h(g(f(x)))
print 'h(g(f(x))): {}'.format(time() - time0)
def fgh(x):
return h(g(f(x)))
time0 = time()
for x in range(1,10**7):
x_ = fgh(x)
print 'composed: {}'.format(time() - time0)
time0 = time()
for x in range(1,10**7):
x_ = f(x)
x__ = g(x_)
x___ = h(x__)
print 'subsequent: {}'.format(time() - time0)
Als Runtimes, erhalte ich:
h(g(f(x))): 2.83475399017
composed: 3.29999113083
subsequent: 3.4387819767
OK, ich dachte so etwas. Ist es fair zu sagen, dass, wenn jede der komponierten Funktionen komplexer und zeitintensiver ist, es für die Laufzeit keine Rolle spielt, wie ich sie komponiere? (d. h. der zusätzliche Funktionsaufruf in Beispiel 2 wird vernachlässigbar) – Aplln
Für den allgemeinen Fall hängt dies von der Funktion ab - es kann Situationen geben, in denen die Zusammensetzungsreihenfolge wichtig ist (zum Beispiel: wenn die Multiplikation großer Matrizen zusammengesetzt wird). Für Ihr Beispiel ist es vielleicht nicht so wichtig, aber man kann davon ausgehen, dass Operationen wie das Nehmen der Quadratwurzel für größere Zahlen langsamer sind, also wird es etwas langsamer sein, wenn wir es für das Ende belassen –