2016-01-20 2 views
1

Я пытаюсь создать единый массив, который следует за точной гауссовой дистрибутивностью. np.random.normal это делает случайным образом выборку из гауссова, но как я могу воспроизвести и точную гаусскую, учитывая некоторую среднюю и сигму. Таким образом, массив будет создавать гистограмму, которая следует за точным гауссовым, а не только приблизительным гауссовым, как показано ниже.неслучайные варианты выборки np.random.normal

mu, sigma = 10, 1 
s = np.random.normal(mu, sigma, 1000) 

fig = figure() 
ax = plt.axes() 

totaln, bbins, patches = ax.hist(s, 10, normed = 1, histtype = 'stepfilled', linewidth = 1.2) 

plt.show() 

ответ

2

Если вы хотите получить точную гистограмму, не создавайте точки. Вы можете никогда не получить «точное» гауссовое распределение из наблюдаемых точек, просто потому, что вы не можете иметь долю точки в гистограмме.

Вместо этого постройте график в виде гистограммы.

import numpy as np 
import matplotlib.pyplot as plt 

def gaussian(x, mean, std): 
    scale = 1.0/(std * np.sqrt(2 * np.pi)) 
    return scale * np.exp(-(x - mean)**2/(2 * std**2)) 

mean, std = 2.0, 5.0 
nbins = 30 
npoints = 1000 

x = np.linspace(mean - 3 * std, mean + 3 * std, nbins + 1) 
centers = np.vstack([x[:-1], x[1:]]).mean(axis=0) 
y = npoints * gaussian(centers, mean, std) 

fig, ax = plt.subplots() 
ax.bar(x[:-1], y, width=np.diff(x), color='lightblue') 

# Optional... 
ax.margins(0.05) 
ax.set_ylim(bottom=0) 

plt.show() 

enter image description here

Смежные вопросы