Numpy 改变范围会导致分布不正常
给出了绘制此图的一些代码Numpy 改变范围会导致分布不正常,numpy,Numpy,给出了绘制此图的一些代码 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 probabi
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))
我修改了这条线
x = np.arange(-10, 11)
x = np.arange(10, 31)
这条线
x = np.arange(-10, 11)
x = np.arange(10, 31)
我有这个数字
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))
如何解决这个问题?考虑到您要求Python做的事情,这个图中没有错误:它是一个从正态分布尾部(10到31之间的任意值)开始的10000个样本的直方图,平均值为0,标准偏差为3。由于概率在正常值的尾部急剧下降,10000个概率中没有一个超过17个,这就是为什么你没有得到31的完整范围 如果您只想让绘图的x轴覆盖整个预期范围,可以在
plt.hist
之后添加plt.xlim(9.5,31.5)
如果您想要在整个范围内支持直方图,则需要调整分布的平均值和/或方差。例如,如果在获取prob
时指定正态分布的平均值为20而不是0,即
prob = ss.norm.cdf(xU, loc=20, scale=3) - ss.norm.cdf(xL, loc=20, scale=3)
然后,您将恢复一个类似的直方图,只是向右平移20。鉴于您要求Python所做的,此图中没有错误:它是一个从正态分布尾部(四舍五入到10和31之间的任何值)开始的10000个样本的直方图,平均值为0,标准偏差为3。由于概率在正常值的尾部急剧下降,10000个概率中没有一个超过17个,这就是为什么你没有得到31的完整范围 如果您只想让绘图的x轴覆盖整个预期范围,可以在
plt.hist
之后添加plt.xlim(9.5,31.5)
如果您想要在整个范围内支持直方图,则需要调整分布的平均值和/或方差。例如,如果在获取prob
时指定正态分布的平均值为20而不是0,即
prob = ss.norm.cdf(xU, loc=20, scale=3) - ss.norm.cdf(xL, loc=20, scale=3)
然后您将恢复一个类似的直方图,只是向右平移了20