随机生成正太分布样本原理及python实现

在概率统计学中,均匀分布算得上是潘多拉魔盒,基本所有重要的概率分布都可以从基本的均匀分布Uniform(0,1)中生成出来,正态分布也不例外。

随机生成正太分布样本原理及python实现_第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


你可能感兴趣的:(Python,概率论与数理统计)