首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >np.random.normal的非随机抽样版本

np.random.normal的非随机抽样版本
EN

Stack Overflow用户
提问于 2016-01-20 17:19:38
回答 1查看 1.3K关注 0票数 1

我试图生成一个数组,它遵循精确的高斯分布。np.random.normal是通过从高斯随机抽样来做到这一点的,但是我如何在给定均值和西格玛的情况下再现和精确的高斯。因此,数组将产生一个直方图,它遵循的是精确的高斯,而不仅仅是下面所示的近似高斯。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2016-01-20 17:33:16

如果你想要一个精确的高斯直方图,不要生成点。你永远不可能从观察到的点中得到“精确”的高斯分布,仅仅因为你不能在直方图中得到一个点的分数。

相反,以条形图的形式绘制曲线。

代码语言:javascript
复制
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()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34906438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档