【问题标题】:How to normalize weighted list?如何标准化加权列表?
【发布时间】:2015-04-20 09:25:03
【问题描述】:

我想加权一个元素列表并从列表中选择随机元素。我有以下 javascript,可以做到这一点:

var generateWeighedList = function(list, weight) {
    var weighed_list = [];

    // Loop over weights
    for (var i = 0; i < weight.length; i++) {
        var multiples = weight[i] * 100;

        // Loop over the list of items
        for (var j = 0; j < multiples; j++) {
            weighed_list.push(list[i]);
        }
    }

    return weighed_list;
};

var list = ['javascript', 'php', 'ruby', 'python'];
var weight = [0.5, 0.2, 0.2, 0.1];
var weighed_list = generateWeighedList(list, weight);

console.log(weighed_list.length);

用户可以将权重设为 1 到 100 之间的数字。输入将是这样的:

var list = ['javascript', 'php', 'ruby', 'python'];
var weight = [10, 50, 70, 90];

如何自定义算法,使最后的权重列表总和为100,每个元素都有正确的比例到100%?

【问题讨论】:

    标签: javascript weighted-average


    【解决方案1】:
    var list = ['javascript', 'php', 'ruby', 'python'];
    var weight = [10, 50, 70, 90];
    // build new array with length of weight
    var weighed_list = Array.apply(null, { length: weight.length });
    // get the sum of all weights
    var sum = weight.reduce(function (a, b) { return a + b; }, 0);
    // final take the ratio of every weight
    weight.forEach(function (a, i) { weighed_list[i] = 100 * a / sum; });
    

    【讨论】:

    • in weighed_list 是结果
    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2015-04-05
    相关资源
    最近更新 更多