用于在正态分布的数据集中生成随机值的示例算法?

时间:2010-10-13 02:01:58

标签: algorithm random normal-distribution

我正在尝试生成一些具有简单非均匀概率的随机数,以模拟用于测试目的的逼真数据。我正在寻找一个接受mu和sigma作为参数的函数,并返回x,其中x在某些范围内的可能值遵循标准钟形曲线或其附近。它不需要超精确甚至有效。结果数据集不需要与我设置的确切mu和sigma匹配。我只是在寻找一个相对简单的非均匀随机数发生器。将可能的返回值集限制为整数可能没问题。我已经看到了很多建议,但似乎没有一个适合这个简单的案例。

2 个答案:

答案 0 :(得分:2)

简而言之,

Box-Muller transform

首先,从区间(0,1)得到两个独立的,均匀的随机数,称它们为U和V.

然后你可以从公式中得到两个独立的,单位正态分布的随机数

X = sqrt(-2 * log(U)) * cos(2 * pi * V);
Y = sqrt(-2 * log(U)) * sin(2 * pi * V);

这为你提供了mu = 0,sigma = 1的随机数;设置sigma = s,将随机数乘以s;设置mu = m,将m加到随机数中。

答案 1 :(得分:0)

我的第一个想法是为什么你不能使用现有的图书馆?我敢肯定,大多数语言已经有一个用于生成普通随机数的库。

如果由于某种原因你不能使用现有的库,那么@ellisbben概述的方法编程起来相当简单。一个更简单(近似)的算法就是将12个统一数字相加:

X = -6 ## We set X to be -mean value of 12 uniforms
for i in 1 to 12:
   X += U

X的值大致正常。下图显示了此算法与正态分布相比的10 ^ 5次绘制。

enter image description here