Несколько вещей, которые вы путаете.
random.normal рисует n
числа случайным образом из кривой колокола
Таким образом, у вас есть 1000 чисел, каждоеотчетливый, все нарисовано по кривой.Чтобы воссоздать кривую, вам нужно применить некоторое бининг.Количество точек в каждой ячейке воссоздает кривую (сама по себе одна точка вряд ли может представлять вероятность).Использование некоторого расширенного биннинга для вашего x
вектора только из 1000 точек:
h,hx=np.histogram(x,bins=50)
и построение графика h
как функции hx
(поэтому я группирую ваши тысячи чисел в 50 бинов, *На оси 1014 * будет показано количество точек в корзинах:
Теперь мы видим, что x
было взято из распределения колоколов - шанс упасть в центральную корзинуопределяется по Гауссу. Это выборка, поэтому каждая точка, конечно, может немного отличаться - чем больше точек вы используете и чем точнее биннинг, тем лучше (сглаживание).
y = normal(x,mu,sigma)
Это просто оценивает гауссиану в любой заданный x
, поэтому на самом деле, поставьте normal
любой список чисел вокруг вашего среднего значения (мю), и он точно вычислит кривую колокола (точная вероятность). Построение вашего y
против x
(не имеет значения, что ваш x
является гауссовским, но это среднее значение на 1000 пунктов, поэтому он может воссоздать функции):
Посмотрите, как гладкоэто?Это потому, что это не выборка, это точный расчет функции.Вы могли бы использовать любые 1000 точек вокруг 0, и это выглядело бы так же хорошо.