Muestreo Aleatorio Ponderado en JavaScript

JavaScriptJavaScriptBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos una implementación práctica de una función de muestra ponderada en JavaScript. La función devuelve un elemento aleatorio de una matriz, con probabilidades asignadas a cada elemento según los pesos proporcionados. A través de este laboratorio, aprenderemos a usar métodos de matriz como reduce() y findIndex() junto con Math.random() para generar el resultado deseado.


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{{"Muestreo Aleatorio Ponderado en JavaScript"}} javascript/data_types -.-> lab-28696{{"Muestreo Aleatorio Ponderado en JavaScript"}} javascript/arith_ops -.-> lab-28696{{"Muestreo Aleatorio Ponderado en JavaScript"}} javascript/comp_ops -.-> lab-28696{{"Muestreo Aleatorio Ponderado en JavaScript"}} javascript/higher_funcs -.-> lab-28696{{"Muestreo Aleatorio Ponderado en JavaScript"}} javascript/spread_rest -.-> lab-28696{{"Muestreo Aleatorio Ponderado en JavaScript"}} end

Cómo obtener una muestra ponderada de una matriz en JavaScript

Para obtener aleatoriamente un elemento de una matriz según los pesos proporcionados, siga estos pasos:

  1. Abra la Terminal/SSH y escriba node para comenzar a practicar la codificación.
  2. Utilice Array.prototype.reduce() para crear una matriz de sumas parciales para cada valor en weights.
  3. Utilice Math.random() para generar un número aleatorio y Array.prototype.findIndex() para encontrar el índice correcto basado en la matriz producida previamente.
  4. Finalmente, devuelva el elemento de arr con el índice producido.

A continuación, se muestra el código para lograr esto:

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

Puede probar esta función pasando una matriz y sus pesos correspondientes como argumentos:

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

Resumen

¡Felicitaciones! Has completado el laboratorio de Muestra Ponderada. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.