Advertisement
Guest User

Untitled

a guest
Oct 31st, 2010
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.21 KB | None | 0 0
  1. #! /usr/bin/python
  2. # Save as test.py, then run
  3. #
  4. # My times:
  5. #     sven1: 7.10525
  6. #     sven2: 0.50151
  7. #     liori: 1.15823
  8. #    delnan: 2.17310
  9. #      emil: 7.72502
  10. #     steve: 0.72302
  11.  
  12. import random
  13. import numpy
  14. import itertools
  15. import timeit
  16.  
  17. x = [random.random()>0.5 for i in xrange(1000)]
  18.  
  19. def sven1():
  20.     return sum(2**i*b for i, b in enumerate(x))
  21.  
  22. def sven2():
  23.     return numpy.sum(2**numpy.arange(len(x))*x)
  24.  
  25. def liori():
  26.     return reduce(lambda a,b:2*a+b, reversed(x))
  27.  
  28. def powers(x):
  29.     """yield powers of x, starting from x**0 forever"""
  30.     power = 1
  31.     while True:
  32.         yield power
  33.         power *= x
  34.  
  35. def delnan():
  36.     # in Python 2, use itertools.izip!
  37.     return sum(int(place) * place_weight for place_weight, place in
  38.                itertools.izip(powers(2), reversed(x)))
  39.  
  40. def emil():
  41.     return sum([int(y[1])*2**y[0] for y in enumerate(x)])
  42.  
  43. def steve():
  44.     y = 0
  45.     for i,j in enumerate(x):
  46.         if j: y += int(j)<<i
  47.     return y
  48.  
  49. if __name__ == '__main__':
  50.     names = ['sven1', 'sven2', 'liori', 'delnan', 'emil', 'steve']
  51.     for name in names:
  52.         print "%10s: %2.5f" % (name, timeit.timeit( 'test.%s()' % name, 'import test', number=1000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement