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

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -