Как сделать шанс выпадения определённой переменной?

как сделать так, чтобы например число 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
→ Ссылка