Échantillonnage aléatoire pondéré en JavaScript

JavaScriptJavaScriptBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer une implémentation pratique d'une fonction d'échantillonnage pondéré en JavaScript. La fonction renvoie un élément aléatoire d'un tableau, avec des probabilités attribuées à chaque élément sur la base des poids fournis. Grâce à ce laboratoire, nous apprendrons à utiliser des méthodes de tableau telles que reduce() et findIndex() ainsi que Math.random() pour générer le résultat souhaité.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic 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{{"Échantillonnage aléatoire pondéré en JavaScript"}} javascript/data_types -.-> lab-28696{{"Échantillonnage aléatoire pondéré en JavaScript"}} javascript/arith_ops -.-> lab-28696{{"Échantillonnage aléatoire pondéré en JavaScript"}} javascript/comp_ops -.-> lab-28696{{"Échantillonnage aléatoire pondéré en JavaScript"}} javascript/higher_funcs -.-> lab-28696{{"Échantillonnage aléatoire pondéré en JavaScript"}} javascript/spread_rest -.-> lab-28696{{"Échantillonnage aléatoire pondéré en JavaScript"}} end

Comment obtenir un échantillonnage pondéré à partir d'un tableau en JavaScript

Pour obtenir aléatoirement un élément d'un tableau en fonction des poids fournis, suivez ces étapes :

  1. Ouvrez le Terminal/SSH et tapez node pour commencer à pratiquer la programmation.
  2. Utilisez Array.prototype.reduce() pour créer un tableau de sommes partielles pour chaque valeur dans weights.
  3. Utilisez Math.random() pour générer un nombre aléatoire et Array.prototype.findIndex() pour trouver l'index correct en fonction du tableau produit précédemment.
  4. Enfin, renvoyez l'élément de arr avec l'index produit.

Voici le code pour y parvenir :

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)
  ];
};

Vous pouvez tester cette fonction en passant un tableau et ses poids correspondants en arguments :

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

Résumé

Félicitations ! Vous avez terminé le laboratoire d'échantillonnage pondéré. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.