Неравновероятные случайные числа с помощью функции синуса на Python

С помощью функции синуса можно обеспечить так называемое смещение. Механизм мне не совсем понятен.

В скрипте ниже с помощью функции my_random() генерируется случайное число. При этом синус и m обеспечивают, чтобы это число с большей вероятностью оказалось в определенном диапазоне. В зависимости от переданного m вероятность оказаться в том или ином диапазоне разная.

Коэффициенты (m) подобраны. Все равно идеального распределения «неравновероятности» таким способом достигнуть не удалось.

import math
import random
 
def my_random(m):
    n = math.sin(random.random() * m)
    return round(n, 3)
 
def analysis(l):
    a = {'a':0, 'b':0, 'c':0, 'd':0, 'zero':0, 'one':0, '-':0}
    for i in l:
        if 0 < i <= 0.249:
            a['a'] += 1
        elif 0.250 <= i <= 0.499:
            a['b'] += 1
        elif 0.500 <= i <= 0.749:
            a['c'] += 1
        elif 0.750 <= i <= 0.999:
            a['d'] += 1
        elif i == 0:
            a['zero'] += 1
        elif i == 1:
            a['one'] += 1
        else:
            a['-'] += 1
    b = {}
    for i in a:
        b[i] = round((a[i] / qty) * 100 , 2)
    print (b)
 
coef  = [0.85, 0.9,  1, 1.1, 1.2, 1.3, 1.4, 1.5]
qty = 1000
for j in coef:
    l = []
    for i in range(qty):
        l.append(my_random(j))
    analysis(l)

Пример результата работы скрипта:

{'a': 30.9, 'c': 35.4, 'b': 33.4, 'd': 0.3, '-': 0.0, 'one': 0.0, 'zero': 0.0}
{'a': 27.0, 'c': 37.4, 'b': 29.3, 'd': 6.2, '-': 0.0, 'one': 0.0, 'zero': 0.1}
{'a': 24.5, 'c': 34.1, 'b': 25.1, 'd': 16.1, '-': 0.0, 'one': 0.0, 'zero': 0.2}
{'a': 23.3, 'c': 28.2, 'b': 23.9, 'd': 24.6, '-': 0.0, 'one': 0.0, 'zero': 0.0}
{'a': 21.0, 'c': 27.4, 'b': 24.3, 'd': 27.2, '-': 0.0, 'one': 0.0, 'zero': 0.1}
{'a': 19.5, 'c': 26.2, 'b': 18.7, 'd': 35.5, '-': 0.0, 'one': 0.0, 'zero': 0.1}
{'a': 18.2, 'c': 23.1, 'b': 21.0, 'd': 37.7, '-': 0.0, 'one': 0.0, 'zero': 0.0}
{'a': 14.8, 'c': 23.9, 'b': 19.4, 'd': 41.9, '-': 0.0, 'one': 0.0, 'zero': 0.0}

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x