我知道可以在JavaScript中生成随机整数,如下所示:
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
但我想要的是一组偏向特定值的随机数。
作为一个例子,如果我的特定中心值是200,我想要一组范围很大的随机数,但大多数是200左右。希望会有像
这样的函数 biasedRandom(center, biasedness)
答案 0 :(得分:1)
听起来像高斯分布可能就在这里。
This stackoverflow post描述了如何制作高斯形状的东西。然后我们可以通过两个因素来扩展和转移分布;
我在我的示例中包含了生成数字的直方图(使用图表),因此您可以轻松地看到这两个参数v
和mean
的变化如何影响生成的数字。在您的真实代码中,您不需要包含图表库。
// Standard Normal variate using Box-Muller transform.
function randn_bm() {
var u = 0, v = 0;
while(u === 0) u = Math.random(); //Converting [0,1) to (0,1)
while(v === 0) v = Math.random();
return Math.sqrt( -2.0 * Math.log( u ) ) * Math.cos( 2.0 * Math.PI * v );
}
//generate array
// number of points
let n = 50;
// variance factor
let v = 1;
// mean
let mean = 200;
let numbers = []
for (let i=0; i<n;i++){
numbers.push(randn_bm())
}
// scale and shift
numbers = numbers.map( function (number){ return number*v + mean})
// THIS PURELY FOR PLOTTING
var trace = {
x: numbers,
type: 'histogram',
};
var data = [trace];
Plotly.newPlot('myDiv', data);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="myDiv"></div>