random - Generate Sequence of Booleans Quickly in Python -
i have loop looks this, , looking make faster.
mylist = range(100)
def normalrandom(): in range(100): b = random.getrandbits(1) if b==1: #do mylist[a] my list has ~100 elements, , know calls random expensive. there faster way make 1 call random, , 100 random booleans?
edit: here best solution far.
def fastrandom(): s = list(range(100)) res = [i in s if random.random() >= .5] item in res: #do mylist[item] - normalrandom: 0:00:00.591000
- fastrandom: 0:00:00.293000
here timings different methods:
code:
from random import getrandbits, randint, random, sample s = list(range(100)) def loop_bits(): res = [] b = getrandbits(len(s)) in s: if b % 2 == 0: res.append(i) b >>= 1 def comp_bits(): res = [i in s if getrandbits(1)] def comp_randint(): res = [i in s if randint(0, 1)] def comp_random(): res = [i in s if random() >= .5] and results different interperters:
$ python2.7 -m timeit -s 'import randtest' 'randtest.loop_bits()' 10000 loops, best of 3: 97.7 usec per loop $ python2.7 -m timeit -s 'import randtest' 'randtest.comp_bits()' 10000 loops, best of 3: 55.6 usec per loop $ python2.7 -m timeit -s 'import randtest' 'randtest.comp_randint()' 1000 loops, best of 3: 306 usec per loop $ python2.7 -m timeit -s 'import randtest' 'randtest.comp_random()' 10000 loops, best of 3: 25.5 usec per loop $ $ pypy -m timeit -s 'import randtest' 'randtest.loop_bits()' 10000 loops, best of 3: 44 usec per loop $ pypy -m timeit -s 'import randtest' 'randtest.comp_bits()' 10000 loops, best of 3: 41 usec per loop $ pypy -m timeit -s 'import randtest' 'randtest.comp_randint()' 100000 loops, best of 3: 14.4 usec per loop $ pypy -m timeit -s 'import randtest' 'randtest.comp_random()' 100000 loops, best of 3: 12.7 usec per loop $ $ python3 -m timeit -s 'import randtest' 'randtest.loop_bits()' 10000 loops, best of 3: 53.7 usec per loop $ python3 -m timeit -s 'import randtest' 'randtest.comp_bits()' 10000 loops, best of 3: 48.9 usec per loop $ python3 -m timeit -s 'import randtest' 'randtest.comp_randint()' 1000 loops, best of 3: 436 usec per loop $ python3 -m timeit -s 'import randtest' 'randtest.comp_random()' 10000 loops, best of 3: 22.2 usec per loop so, in cases last (a comprehension using random.random() far fastest.
Comments
Post a Comment