Timeit function
Here i present a little function (with an example below) to time some bunch of code using timeit.
# -*- coding: utf-8 *-* import timeit class Chronoit(): """ A little class to handle timeit output. The output is in seconds. """ def __init__(self, main_statement, setup_statement, total_iterations): self.main_stmt = main_statement self.setup_stmt = setup_statement self.total_iter = total_iterations t = timeit.Timer(self.main_stmt, self.setup_stmt) self.show_results(t.timeit(number=self.total_iter)) def show_results(self, time_elapsed): time_per_pass = time_elapsed / self.total_iter if time_per_pass > 60.0: minutes_per_pass = time_per_pass / 60.0 secs_per_pass = time_per_pass % 60.0 print "#" * 50 print "Timing" print "setup stmt: \"" + self.setup_stmt.split("\n")[1] + " [...]\"" print "main stmt: \"" + self.main_stmt.split("\n")[1] + " [...]\"" print "\t total time: %d secs" % time_elapsed print "\t iterations: %d " % self.total_iter print '%.2f mins/pass %.2f secs/pass' % \ (minutes_per_pass, secs_per_pass) else: secs_per_pass = time_per_pass print "_" * 50 print "Timing" print "setup stmt: \"" + self.setup_stmt.split("\n")[1] + " [...]\"" print "main stmt: \"" + self.main_stmt.split("\n")[1] + " [...]\"" print "\t total time: %d secs " % time_elapsed print "\t iterations: %d " % self.total_iter print '\t %.2f secs/pass' % secs_per_pass print "_" * 50 if __name__ == "__main__": MAX_ITERATIONS = 10 N, M = 100, 1000 ################################################################################ setup_stmt = \ """ import numpy matrix = numpy.random.randint(0,100,(%d * %d)) #""" % (N, M) main_stmt = \ """ for i in xrange(%d * %d): pixel = matrix[i] pixel = pixel * 20 matrix[i] = pixel #""" % (N, M) t_obj = Chronoit(main_stmt, setup_stmt, MAX_ITERATIONS)
My intention also is to extend this idea making a class of it, and do some profilling.
Comments