使用scipy erfinv绘制高斯随机变量

aph*_*aph 0 python random numpy scientific-computing scipy

我想绘制npts随机变量,以高斯分布,均值μ和色散sigma.我知道如何在Numpy中做到这一点:

x = np.random.normal(loc=mu, scale=sigma, size=npts)
print(np.std(x), np.mean(x))
0.1998, 0.3997
Run Code Online (Sandbox Code Playgroud)

这也应该可以通过逆变换使用scipy.special.erfinv,从均匀分布开始:

u = np.random.uniform(0, 1, npts)
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何正确缩放比例.有没有人这样做过?

ayh*_*han 6

试试这个:

mean = 100
sigma = 7
x = mean + 2**0.5 * sigma * erfinv(np.random.uniform(size=10**5) * 2 - 1)
x.mean(), x.std()
Out: (99.965915366042381, 7.0062395839075107)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

从erf到正态分发的转换来自John D. Cook的博客.