生成具有非均匀分布的随机数 [英] Generate random number with a non-uniform distribution

查看:375
本文介绍了生成具有非均匀分布的随机数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Javascript的Math.random()返回具有均匀"分布的伪随机数.

Javascript's Math.random() returns a psuedo-random number with "uniform" distribution.

我需要生成一个偏向任一侧的[0,1]范围内的随机数. (意味着,更有可能在0或1附近获得更多数字)

I need to generate a random number in the range [0,1] that is skewed to either side. (Meaning, higher chance of getting more numbers next to 0 or next to 1)

理想情况下,我希望有一个参数来设置此曲线.

Ideally I would like to have a parameter to set this curve.

我想我可以做Math.random^2来得到这样的结果,但是有什么更复杂的方法可以实现这一目标?

I supposed I can do Math.random^2 to get such a result, but what more sophisticated ways are there to achieve this?

推荐答案

我认为您想要 alpha=beta=0.5

I think you want beta distribution with alpha=beta=0.5

可以使用逆累积分布将统一随机数转换为beta分布.

It is possible to transform uniform random number to beta distribution using inverse cumulative distribution.

unif = Math.random()

我不熟悉javascript,但这应该很清楚:

I am not familiar with javascript, but this should be clear:

beta = sin(unif*pi/2)^2

PS:您可以生成许多这样的数字并绘制直方图

PS: you can generate many such numbers and plot histogram

要向0倾斜,请将beta值转换为-

For skewing towards 0, transform the beta values as -

beta_left = (beta < 0.5) ? 2*beta : 2*(1-beta);

要向1倾斜,请转换为-

For skewing towards 1, transform as -

beta_right = (beta > 0.5) ? 2*beta-1 : 2*(1-beta)-1;

这篇关于生成具有非均匀分布的随机数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆