소개
이 랩에서는 JavaScript 에서 가중치 샘플링 함수를 실용적으로 구현하는 방법을 살펴봅니다. 이 함수는 배열에서 무작위 요소를 반환하며, 각 요소에는 제공된 가중치에 따라 확률이 할당됩니다. 이 랩을 통해 reduce() 및 findIndex()와 같은 Array 메서드와 Math.random()을 사용하여 원하는 결과를 생성하는 방법을 배우게 됩니다.
This tutorial is from open-source community. Access the source code
이 랩에서는 JavaScript 에서 가중치 샘플링 함수를 실용적으로 구현하는 방법을 살펴봅니다. 이 함수는 배열에서 무작위 요소를 반환하며, 각 요소에는 제공된 가중치에 따라 확률이 할당됩니다. 이 랩을 통해 reduce() 및 findIndex()와 같은 Array 메서드와 Math.random()을 사용하여 원하는 결과를 생성하는 방법을 배우게 됩니다.
제공된 가중치를 기반으로 배열에서 요소를 무작위로 얻으려면 다음 단계를 따르세요.
node를 입력하여 코딩 연습을 시작합니다.Array.prototype.reduce()를 사용하여 weights의 각 값에 대한 부분 합의 배열을 생성합니다.Math.random()을 사용하여 난수를 생성하고 Array.prototype.findIndex()를 사용하여 이전에 생성된 배열을 기반으로 올바른 인덱스를 찾습니다.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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.