Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python
- # Save as test.py, then run
- #
- # My times:
- # sven1: 7.10525
- # sven2: 0.50151
- # liori: 1.15823
- # delnan: 2.17310
- # emil: 7.72502
- # steve: 0.72302
- import random
- import numpy
- import itertools
- import timeit
- x = [random.random()>0.5 for i in xrange(1000)]
- def sven1():
- return sum(2**i*b for i, b in enumerate(x))
- def sven2():
- return numpy.sum(2**numpy.arange(len(x))*x)
- def liori():
- return reduce(lambda a,b:2*a+b, reversed(x))
- def powers(x):
- """yield powers of x, starting from x**0 forever"""
- power = 1
- while True:
- yield power
- power *= x
- def delnan():
- # in Python 2, use itertools.izip!
- return sum(int(place) * place_weight for place_weight, place in
- itertools.izip(powers(2), reversed(x)))
- def emil():
- return sum([int(y[1])*2**y[0] for y in enumerate(x)])
- def steve():
- y = 0
- for i,j in enumerate(x):
- if j: y += int(j)<<i
- return y
- if __name__ == '__main__':
- names = ['sven1', 'sven2', 'liori', 'delnan', 'emil', 'steve']
- for name in names:
- print "%10s: %2.5f" % (name, timeit.timeit( 'test.%s()' % name, 'import test', number=1000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement