JavaScript中的加权随机采样

JavaScriptJavaScriptBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探索如何在JavaScript中实际实现一个加权采样函数。该函数从一个数组中返回一个随机元素,并根据提供的权重为每个元素分配概率。通过本实验,我们将学习如何使用诸如reduce()和findIndex()等数组方法,以及Math.random()来生成预期的结果。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("`JavaScript`")) -.-> javascript/BasicConceptsGroup(["`Basic Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/AdvancedConceptsGroup(["`Advanced Concepts`"]) javascript/BasicConceptsGroup -.-> javascript/variables("`Variables`") javascript/BasicConceptsGroup -.-> javascript/data_types("`Data Types`") javascript/BasicConceptsGroup -.-> javascript/arith_ops("`Arithmetic Operators`") javascript/BasicConceptsGroup -.-> javascript/comp_ops("`Comparison Operators`") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("`Higher-Order Functions`") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("`Spread and Rest Operators`") subgraph Lab Skills javascript/variables -.-> lab-28696{{"`JavaScript中的加权随机采样`"}} javascript/data_types -.-> lab-28696{{"`JavaScript中的加权随机采样`"}} javascript/arith_ops -.-> lab-28696{{"`JavaScript中的加权随机采样`"}} javascript/comp_ops -.-> lab-28696{{"`JavaScript中的加权随机采样`"}} javascript/higher_funcs -.-> lab-28696{{"`JavaScript中的加权随机采样`"}} javascript/spread_rest -.-> lab-28696{{"`JavaScript中的加权随机采样`"}} end

如何在JavaScript中从数组获取加权样本

要根据提供的权重从数组中随机获取一个元素,请遵循以下步骤:

  1. 打开终端/SSH并输入node以开始练习编码。
  2. 使用Array.prototype.reduce()weights中的每个值创建一个部分和的数组。
  3. 使用Math.random()生成一个随机数,并使用Array.prototype.findIndex()根据先前生成的数组找到正确的索引。
  4. 最后,返回arr中具有生成索引的元素。

以下是实现此目的的代码:

const weightedSample = (arr, weights) => {
  let roll = Math.random();
  return arr[
    weights
      .reduce(
        (acc, w, i) => (i === 0 ? [w] : [...acc, acc[acc.length - 1] + w]),
        []
      )
      .findIndex((v, i, s) => roll >= (i === 0 ? 0 : s[i - 1]) && roll < v)
  ];
};

你可以通过将数组及其相应的权重作为参数传递来测试此函数:

weightedSample([3, 7, 9, 11], [0.1, 0.2, 0.6, 0.1]); // 9

总结

恭喜你!你已经完成了加权采样实验。你可以在LabEx中练习更多实验来提升你的技能。

您可能感兴趣的其他 JavaScript 教程