Генерация обратных нормальных случайных чисел в python? - PullRequest
0 голосов
/ 14 июля 2020

Раньше я использовал random.normal () для генерации одного числа, которое при многократном вызове в совокупности создаст распределение кривой колокола. Что я пытаюсь сделать сейчас, так это создать противоположное / обратное, где распределение смещено в сторону крайностей в пределах диапазона? В Excel есть встроенные функции, которые, кажется, делают то, что я хочу. Есть ли способ сделать это в python? Спасибо

Ответы [ 3 ]

0 голосов
/ 14 июля 2020

Похоже, вы хотите сместить распределение за край диапазона и обернуть его вокруг?

Что-то вроде этого может сделать то, что вы ищете:

num = (random.normal() + 0.5) % 1

0 голосов
/ 14 июля 2020

Похоже, вам нужно распределение с «перевернутой колоколообразной кривой» по сравнению с нормальным распределением. Если это так, то следующий метод реализует это распределение с помощью выборки отклонения и модифицированной версии стандартного нормального распределения. «x0» и «x1» - это диапазоны чисел для генерации.

def invertedNormal(x0, x1):
  # Get the ends of the PDF (the bounding
  # box will cover the PDF at the given range)
  x0pdf = 1-math.exp(-(x0*x0))
  x1pdf = 1-math.exp(-(x1*x1))
  ymax = max(x0pdf, x1pdf)
  while True:
    # Choose a random x-coordinate
    x=random.random()*(x1-x0)+x0
    # Choose a random y-coordinate
    y=random.random()*ymax
    # Return x if y falls within PDF
    if y < 1-math.exp(-(x*x)):
      return x
0 голосов
/ 14 июля 2020

Вам нужно будет решить, какое распределение вероятностей использовать.

Если вы хотите использовать чистый Python, без внешних зависимостей, проверьте, какие распределения доступны в модуле Random: https://docs.python.org/3/library/random.html

Например, вы можете использовать бета-распределение с параметрами (0.5, 0.5): https://docs.python.org/3/library/random.html#random .betavariate

См. Страницу Википедии для бета-распределения. чтобы понять параметры: https://en.wikipedia.org/wiki/Beta_distribution

Для расширенного использования внешний пакет scipy является обычным способом доступа к распределениям вероятностей в пределах Python: https://docs.scipy.org/doc/scipy/reference/stats.html

...