在Javascript中的numpy.random.choice?

时间:2017-01-14 19:19:30

标签: javascript node.js random

Numpy.random.choice是一个很好的简单函数,它允许你根据一些概率分布对int数组进行采样:

>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 3, 0])

javascript(节点js)中是否有等价物?

注意:我发现这个包https://www.npmjs.com/package/random-weighted-choice但我不想每次需要获取样本时都要创建一个hashmap / table。

2 个答案:

答案 0 :(得分:0)

您可以使用此ES6代码:



function randomChoice(p) {
    let rnd = p.reduce( (a, b) => a + b ) * Math.random();
    return p.findIndex( a => (rnd -= a) < 0 );
}

function randomChoices(p, count) {
    return Array.from(Array(count), randomChoice.bind(null, p));
}

let result = randomChoices([0.1, 0, 0.3, 0.6, 0], 3);
console.log(result);
&#13;
&#13;
&#13;

reduce部分计算概率之和。如果预计这些总是等于1,那么当然不需要调用,rnd = Math.random()就足够了。

答案 1 :(得分:0)

您可以使用lodash&#39; _.sample功能:

_.sample([1, 2, 3, 4]);
// => 2