我想按照钟声的顺序生成正态分布。 我用这个代码来生成数字:
import numpy as np
mu,sigma,n = 0.,1.,1000
def normal(x,mu,sigma):
return ( 2.*np.pi*sigma**2. )**-.5 * np.exp( -.5 * (x-mu)**2. / sigma**2. )
x = np.random.normal(mu,sigma,n) #generate random list of points from normal distribution
y = normal(x,mu,sigma) #evaluate the probability density at each point
x,y = x[np.argsort(y)],np.sort(y) #sort according to the probability density
它是在:Generating normal distribution in order python, numpy中提出的代码
但这些数字并没有遵循钟形结构。 有什么想法吗? 非常感谢
有几件事你很困惑。在
随机。正常从钟形曲线中随机绘制
n
个数字你有1000个数字,每个都是不同的,都是从曲线上画出来的。要重新创建曲线,您需要应用一些binning。每个箱子中的点数将重新创建曲线(仅仅一个点本身很难代表一个概率)。在仅包含1000个点的
x
向量上使用一些扩展的binning:并将
h
作为hx
的函数绘制出来(所以我将你的1000个数字分成50个箱子,y
轴将显示这些箱子中的点数:现在我们可以看到
x
是从一个钟形分布中得出的,落在中心位置的几率是由高斯分布决定的。这是一个采样,因此每个点可能会有一点变化-使用的点越多,分块越细,效果越好(更平滑)。在y = normal(x,mu,sigma)
这只是在给定的
x
处计算高斯函数,所以实际上,给normal
提供你的平均值(mu)的任何数字列表,它将精确地计算钟形曲线(确切的概率)。根据y
绘制你的y
(不管你的x
本身是高斯的,但它是平均值的1000个点,所以它可以重新创建函数):你看那有多光滑?这是因为这不是抽样,而是函数的精确计算。你可以在0附近使用任何1000点,它看起来也一样好。在
你的代码运行得很好。在
相关问题 更多 >
编程相关推荐