Zeit von funktionen stoppen
Wenn du es dir einfach machen willst nimmst du iPython und benutzt die dort eingebaute %timeit-Funktion. Die greift auf das timeit-Modul zurück
Code: Alles auswählen
In [36]: def foo(): pass
....:
In [37]: %timeit foo()
1000000 loops, best of 3: 215 ns per loop
In [38]:
Du könntest evtl. das timeit-Modul verwenden oder profile bzw. cProfile. Oder es via time.time() bzw. (auf Windows-Systemen) mit time.clock() machen.Basti91 hat geschrieben:Hi ich möchte die Zeit stoppen die Python für 2 Sortierfunktionen braucht, und diese später vergleichen. Weiss jemand wie ich die Zeit Stoppe die eine Funktion zur ausführung benötigt?
habs mit time.clock() gemacht nur hab mal ne frage : in welcher zeiteinheit rechnet den time.clock()?
hier mal mein Quelltext, das Programm soll vergleichen welche Art der Sortierung schneller ist.
hier mal mein Quelltext, das Programm soll vergleichen welche Art der Sortierung schneller ist.
Code: Alles auswählen
import time
print "***Zeitmessung von Sortierfunktionen***"
print "Zunächst wird die normale Sortierfunktion gestartet."
go = raw_input("Bitte drücken sie (S)tart: ")
Liste= input("Bitte Liste eingeben: ")
if go == "s" or go =="S":
def sortieren3(Liste):
start= time.clock()
ausgabe =[]
while len(Liste)!=0:
Min = 0
for i in range(1,len(Liste)):
if Liste[Min]>=Liste[i]:
Min=i
ausgabe +=[Liste[Min]]
neueListe=[]
for n in range(0,len(Liste)):
if n != Min:
neueListe+=[Liste[n]]
Liste= neueListe
ende = time.clock()
zeit1 = ende
rückgabe = [ausgabe,zeit1]
return rückgabe
print sortieren3(Liste)[0]
print "Nun wird die bubblesort-Funktion gestartet."
go = raw_input("Bitte drücken sie (S)tart: ")
if go == "s" or go =="S":
def bubblesort(Liste):
start= time.clock()
anzahl = len(Liste)
vertauscht = 1
while vertauscht:
vertauscht = 0
for index in range(0,anzahl-1,1):
if Liste[index] > Liste[index+1]:
hilf = Liste[index]
Liste[index]=Liste[index+1]
Liste[index+1]=hilf
vertauscht = 1
ende = time.clock()
zeit2 = ende
rückgabe2 = [Liste,zeit2]
return rückgabe2
print bubblesort(Liste)[0]
print "Die normale Sortierfunktion benötigt",sortieren3(Liste)[1],"sec. , die bubblesort-Funktion benötigt",bubblesort(Liste)[1],"sec. ."
Das ist eine Art von Frage, die man sich selbst in wenigen Sekunden mit Hilfe der Dokumentation von Python beantworten kann.Basti91 hat geschrieben:habs mit time.clock() gemacht nur hab mal ne frage : in welcher zeiteinheit rechnet den time.clock()?
Versuch's doch mal ...
Hab das hier gefunden und wie rechne ich das ganze jetzt z.B in Sekunden um?clock( )
On Unix, return the current processor time as a floating point number expressed in seconds. The precision, and in fact the very definition of the meaning of ``processor time'', depends on that of the C function of the same name, but in any case, this is the function to use for benchmarking Python or timing algorithms.
On Windows, this function returns wall-clock seconds elapsed since the first call to this function, as a floating point number, based on the Win32 function QueryPerformanceCounter(). The resolution is typically better than one microsecond.
Sind doch schon Sekunden!Basti91 hat geschrieben:Hab das hier gefunden und wie rechne ich das ganze jetzt z.B in Sekunden um?clock( )
On Unix, return the current processor time as a floating point number expressed in seconds.
Das kommt mir aber komsich vor da wenn ich z.B die Liste [8,5,3,2,4,1,5554654,233,56,223,2,5,8] eingebe ich folgendes ergebnis bekomme:
und 39 sec erscheinen mir ein bisschen arg lang.
Code: Alles auswählen
Die normale Sortierfunktion benötigt 39.2733705426 sec. , die bubblesort-Funktion benötigt 39.2751604181 sec. .
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also eigentlich würde man für Code-Benchmarks ``timeit`` verwenden, weil das automatisch den exakteren Zeitgeber der auf der Platform verfügbar ist nimmt und eine entsprechende Anzahl Wiederholungen fährt, so dass eventuelle Ausreisser ausgeglichen werden.
Das liegt daran, dass du clock() falsch einsetzt. Du musst die Zeitdifferenz bilden, nicht einfach den aktuellen Wert von clock() abrufen und ausgeben.Basti91 hat geschrieben:Das kommt mir aber komsich vor da wenn ich z.B die Liste [8,5,3,2,4,1,5554654,233,56,223,2,5,8] eingebe ich folgendes ergebnis bekomme:
und 39 sec erscheinen mir ein bisschen arg lang.Code: Alles auswählen
Die normale Sortierfunktion benötigt 39.2733705426 sec. , die bubblesort-Funktion benötigt 39.2751604181 sec. .
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ein Integer ist ein Integer und wie du den dann darstellst ist deine Sache. Es kommt aber in Python eigentlich nie eine hexadezimale Darstellung einer Zahl raus, wenn du nicht danach gefragt hast. Ohne Code ist aber schwer zu sagen was dein Fehler ist.
Anyway: ...use timeit, Luke...
Btw: Hexadezimal ist durchaus gängig. Frag einen Informatiker in deiner Nähe
Anyway: ...use timeit, Luke...
Btw: Hexadezimal ist durchaus gängig. Frag einen Informatiker in deiner Nähe
Code: Alles auswählen
import time
print "***Zeitmessung von Sortierfunktionen***"
print "Zunächst wird die normale Sortierfunktion gestartet."
go = raw_input("Bitte drücken sie (S)tart: ")
Liste= input("Bitte Liste eingeben: ")
if go == "s" or go =="S":
def sortieren3(Liste):
start= time.clock()
ausgabe =[]
while len(Liste)!=0:
Min = 0
for i in range(1,len(Liste)):
if Liste[Min]>=Liste[i]:
Min=i
ausgabe +=[Liste[Min]]
neueListe=[]
for n in range(0,len(Liste)):
if n != Min:
neueListe+=[Liste[n]]
Liste= neueListe
ende = time.clock()
zeit1 = ende-start
rückgabe = [ausgabe,zeit1]
return rückgabe
print sortieren3(Liste)[0]
print "Nun wird die bubblesort-Funktion gestartet."
go = raw_input("Bitte drücken sie (S)tart: ")
if go == "s" or go =="S":
def bubblesort(Liste):
start= time.clock()
anzahl = len(Liste)
vertauscht = 1
while vertauscht:
vertauscht = 0
for index in range(0,anzahl-1,1):
if Liste[index] > Liste[index+1]:
hilf = Liste[index]
Liste[index]=Liste[index+1]
Liste[index+1]=hilf
vertauscht = 1
ende = time.clock()
zeit2 = ende-start
rückgabe2 = [Liste,zeit2]
return rückgabe2
print bubblesort(Liste)[0]
print "Die normale Sortierfunktion benötigt",sortieren3(Liste)[1],"sec. , die bubblesort-Funktion benötigt",bubblesort(Liste)[1],"sec. ."
Diese zwei Werte müssen also irgendetwas unter 1 sein da ich bei int(zahl) ja 0 herausbekomme. nun hätte ich die Ausgabe halt gerne so das ich dann 0,...irgendwas sec. herausbekomme.Die normale Sortierfunktion benötigt 9.7188267727e-005 sec. , die bubblesort-Funktion benötigt 5.87880384018e-006 sec. .
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Benutze String Formatting, um das aus der Exponentialform zu bekommen (e-005 == *10^-5)
Code: Alles auswählen
print "%.10f" % time
http://de.wikipedia.org/wiki/ExponentialschreibweiseBasti91 hat geschrieben: Diese zwei Werte müssen also irgendetwas unter 1 sein da ich bei int(zahl) ja 0 herausbekomme. nun hätte ich die Ausgabe halt gerne so das ich dann 0,...irgendwas sec. herausbekomme.