Osc*_*ros 1 python math probability
我正在编写一个小函数,使用Box-Muller方法从Normal分布生成值,但我得到负值.
这是我的源代码
import random
def generate_normal(mu, sigma):
u = random.random()
v = random.random()
z1 = sqrt(-2 * log(u)) * sin(2 * pi * v)
z2 = sqrt(-2 * log(u)) * cos(2 * pi * v)
x1 = mu + z1 * sigma
x2 = mu + z2 * sigma
return x2
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我x1和两者都得到负值x2.例如:
mu: 400
sigma: 150
u: 7.27333176449e-05
v: 0.642384573173
z1: -3.40497345242
x1: -110.746017863
Run Code Online (Sandbox Code Playgroud)
和:
x2: -9.79324023117
Run Code Online (Sandbox Code Playgroud)
单位正态分布以零为中心,双向以小尾巴为正负无穷大.99.7%的值将在三个标准差内,另一个0.3%不在.

在此示例中,平均值为400且标准差为150,您的值的99.7%将落在平均值的三个标准偏差内 - 间隔[-50,850],其中包括负数.因此,期待负面数字.
至于其他0.3%的值,请记住你的数字的3/1000 - 根本不常见.
如果你想要一个有限支持的"钟形"分布,试试beta版本.
最后,除非这是一个学术练习,否则没有必要将你自己的等价物推广到numpy.random.normal().