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é.
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 :
- Ouvrez le Terminal/SSH et tapez
nodepour commencer à pratiquer la programmation. - Utilisez
Array.prototype.reduce()pour créer un tableau de sommes partielles pour chaque valeur dansweights. - Utilisez
Math.random()pour générer un nombre aléatoire etArray.prototype.findIndex()pour trouver l'index correct en fonction du tableau produit précédemment. - Enfin, renvoyez l'élément de
arravec 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.