范围变化会导致分布不正常

时间:2020-05-31 10:03:29

标签: numpy

A post提供了一些绘制此图的代码

import scipy.stats as ss
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 11)
xU, xL = x + 0.5, x - 0.5 
prob = ss.norm.cdf(xU, scale = 3) - ss.norm.cdf(xL, scale = 3)
prob = prob / prob.sum() #normalize the probabilities so their sum is 1
nums = np.random.choice(x, size = 10000, p = prob)
plt.hist(nums, bins = len(x))

enter image description here

我修改了这一行

x = np.arange(-10, 11)

此行

x = np.arange(10, 31)

我有这个数字

enter image description here

该如何解决?

1 个答案:

答案 0 :(得分:0)

考虑到您要Python执行的操作,此图中没有错误:它是从正态分布的尾部(取整为10到31之间的任何值)的10,000个样本的直方图,均值为0,标准差为3 。由于概率在法线的尾部急剧下降,因此发生10,000的概率都没有超过17,这就是为什么您没有将最大范围提高到31的原因。

如果只希望绘图的x轴覆盖您的整个预期范围,则可以在plt.xlim(9.5, 31.5)之后添加plt.hist

如果您希望直方图在整个范围内都具有支持,则需要调整分布的均值和/或方差。例如,如果您指定在获得prob时正态分布的平均值为20,而不是平均值为

prob = ss.norm.cdf(xU, loc=20, scale=3) - ss.norm.cdf(xL, loc=20, scale=3)

然后,您将恢复外观相似的直方图,将其向右平移20。

相关问题