Как сделать шанс выпадения определённой переменной?
как сделать так, чтобы например число 1 выводилось с шансом 80%, а число 2 с шансом 20%?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Вариант 1: - для Python 3.6+ используем функцию random.choices() из встроенного модуля random:
from random import choices
res = choices([1,2], weights=[.8, .2])
Вариант 2: - используем функцию np.random.choice() из модуля Numpy:
import numpy as np
res = np.random.choice([1,2], p=[.8, .2])
сравнение производительности:
In [48]: N = 1000
In [49]: %timeit choices([1,2], weights=[.8, .2], k=N)
183 µs ± 661 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [50]: %timeit np.random.choice([1,2], size=N, p=[.8, .2])
41.3 µs ± 1.07 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [51]: N = 10000
In [52]: %timeit choices([1,2], weights=[.8, .2], k=N)
1.8 ms ± 38.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [53]: %timeit np.random.choice([1,2], size=N, p=[.8, .2])
203 µs ± 7.42 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [54]: 183 / 41.3
Out[54]: 4.430992736077482
In [55]: 1.8 * 1000 / 203
Out[55]: 8.866995073891626