Как лучше всего вычислить разделенное нормальное распределение по среднему значению с верхней и нижней ошибкой?
Пока у меня есть:
from random import choice, gauss
def random_split_normal(mu: float, upper_sigma: float, lower_sigma:int) -> float:
return abs(gauss(0.0, 1.0)) * choice([upper_sigma, -lower_sigma]) + mu
который я вызываю много раз для создания массива:
random_array = []
for _ in range(1000):
random_array.append(random_split_normal(1.0, 2.0, 1.0))
что дает следующий результат при построении гистограммы random_array:
Мне интересно, правильно ли это сделать, используя случайное использование upper_sigma или lower_sigma?






Ваше решение математически эквивалентно, но менее эффективно, поскольку вы без необходимости применяете abs() и selection(), где вы можете просто посмотреть на знак gauss().
Это должно быть близко к определению. Я также переделал сигмы, чтобы они совпадали с нашей обычной ориентацией числовой линии (отрицательная бесконечность слева).
def random_split_normal(mu: float, lower_sigma: float, upper_sigma: float) -> float:
z = gauss(0, 1)
return mu + z * (lower_sigma if z < 0 else upper_sigma)
Это разумно. Спасибо за рекомендации по редактированию!
@ AlexJ.R.Lewis Я не думаю, что нормальный (0, 1) работает, поэтому я изменил его обратно. Также убрано некоторое дублирование в возврате.
@AlexJ.R.Lewis, пожалуйста, примите этот ответ, если он оказался вам полезен :)
Спасибо за Ваш ответ. Мне нравится менять значения
sigmaв обратном порядке, так как обычно я говорю «ответ: x плюс минус y». Но это только я!