我试图生成一个遵循精确高斯分布的单个数组。 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()
答案 0 :(得分: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()