Commit 0a18e051 authored by Raymond Hettinger's avatar Raymond Hettinger Committed by Miss Islington (bot)

Hoist the float conversion out of the inner loop. (GH-10430)



Currently, the *n* and *total* variables get converted to floats each time they are multiplied by random().  This minor tweak does the conversion just once and gets a small speedup (approx 3%).
parent cf5863fa
......@@ -375,6 +375,7 @@ class Random(_random.Random):
if cum_weights is None:
if weights is None:
_int = int
n += 0.0 # convert to float for a small speed improvement
return [population[_int(random() * n)] for i in range(k)]
cum_weights = list(_itertools.accumulate(weights))
elif weights is not None:
......@@ -382,7 +383,7 @@ class Random(_random.Random):
if len(cum_weights) != n:
raise ValueError('The number of weights does not match the population')
bisect = _bisect.bisect
total = cum_weights[-1]
total = cum_weights[-1] + 0.0 # convert to float
hi = n - 1
return [population[bisect(cum_weights, random() * total, 0, hi)]
for i in range(k)]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment