truncnorm
использует ppf
(обратная функция ВПР), чтобы превратить случайную величину.
Похоже на пути ППФ рассчитывается не работает, если диапазон настолько далеко в хвосте
>>> truncnorm._ppf(np.linspace(0, 1, 11), 8.26,1e10)
array([ 8.20953615, 8.20953615, inf, 8.20953615, 8.20953615,
inf, inf, inf, inf, inf,
inf])
Проблема заключается в том, что оба значения для усечения далеко в хвосте нормальное распределение, так что мы по существу работаем только с задачами с 1 минус округлением. Это ограничение с плавающей запятой, что мы не имеем более высокую точность, чем double, например 1-1e-20 == 1
.
>>> stats.norm.cdf(8.26)
0.99999999999999989
Однако нормальное распределение является симметричным, а на нижнем хвосте ППФ не имеет проблем с плавающей точкой, потому что мы работаем в окрестности нуля. Я думаю, что следующее должно дать правильные результаты.
>>> -truncnorm.rvs(-1e10, -8.26,size=10)
array([ 8.8359488 , 8.3112093 , 8.36978251, 8.5732518 , 8.57420297,
8.27919164, 8.5692663 , 8.28482223, 8.35149422, 8.47994703])
Можете ли вы отправить примерный код, который четко показывает проблему? –