我的问题是-使用NumPy函数np.random.randn生成数据x,以100,000点为正态分布。然后绘制直方图。
我的计算是-
x = sp.norm.pdf(np.random.randn(100000))
plt.hist(x, bins = 20, facecolor='blue', alpha=0.5)
我无法获得正态分布的直方图,这有什么问题吗?
要从标准正态分布中获得N个随机样本,可以使用np.random.randn(N)
或scipy's stats.norm.rvs(size=N)
。然后可以将这些样本用于创建直方图。
stats.norm.pdf(y)
可以使用绘制曲线的方式,其中y
是后续x值的数组。将该apdf
进行归一化,即曲线下的面积为1。直方图的总面积是样本数乘以容器宽度(每个样本恰好落入一个容器)。因此,将pdf乘以该因子会将其缩放到直方图的高度。
的结果stats.norm.pdf(np.random.randn(N))
将是N个随机样本的概率列表。大多数样本将以y = 0
pdf的高度约为的形式在曲线的中心(at )附近结束0.40
。这解释了接近该最大值的高峰值。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
N = 100000
# x = np.random.randn(N)
x = stats.norm.rvs(size=N)
num_bins = 20
plt.hist(x, bins=num_bins, facecolor='blue', alpha=0.5)
y = np.linspace(-4, 4, 1000)
bin_width = (x.max() - x.min()) / num_bins
plt.plot(y, stats.norm.pdf(y) * N * bin_width)
plt.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句