在概率统计学中,均匀分布算得上是潘多拉魔盒,基本所有重要的概率分布都可以从基本的均匀分布Uniform(0,1)中生成出来,正态分布也不例外。
先假设Uniform(0,1),随机生成0-1的随机数。然后有两种方法可以把该均匀分布样本转换为符合正态分布的样本。
1.用Box-Muller方法,随机抽出两个从均匀分布的数字和。然后
那和都是正态分布的。
证明可用极坐标,请参考教科书中的Box-Muller方法。
2.用反函数方法,先随机抽出一个从均匀分布的数字,然后
那是正态分布的。
python实现:
import numpy as np
from scipy.special import erfinv
def boxmullersampling(mu=0, sigma=1, size=1):
u = np.random.uniform(size=size)
v = np.random.uniform(size=size)
z = np.sqrt(-2 * np.log(u)) * np.cos(2 * np.pi * v)
return mu + z * sigma
def inverfsampling(mu=0, sigma=1, size=1):
z = np.sqrt(2) * erfinv(2 * np.random.uniform(size=size) - 1)
return mu + z * sigma