Взвешенный случайный выбор с использованием Python

  1. Используйте функцию random.choices() для генерации взвешенных случайных выборов
  2. Используйте функцию numpy.random.choice() для генерации взвешенного случайного выбора

В Python мы можем легко генерировать случайные числа с помощью библиотек Random и NumPy.

Выбор случайных элементов из списка или массива по вероятному результату элемента известен как взвешенный случайный выбор. Выбор элемента определяется присвоением вероятности каждому присутствующему элементу. Иногда из списка сделанных элементов также выбирается более одного элемента.

В этом руководстве мы обсудим, как генерировать взвешенный случайный выбор в Python.

Используйте функцию random.choices() для генерации взвешенных случайных выборов

Здесь random модуль Python используется для создания случайных чисел.

В функции choices() взвешенный случайный выбор выполняется с заменой. Он также известен как взвешенная случайная выборка с заменой. Кроме того, в этой функции важную роль играют веса. Веса определяют вероятный результат выбора каждого элемента. Есть два типа гирь:

  1. Относительный вес
  2. Совокупный вес

Выберите элементы с относительным весом

Параметр weights определяет относительные веса. Вероятный результат различается для каждого элемента в списке. Если вероятный результат для каждого элемента был зафиксирован с использованием относительных весов, то выбор делается только на основе относительных весов.

Вот пример:

import random

List = [12, 24, 36, 48, 60, 72, 84]
print(random.choices(List, weights=(30, 40, 50 , 60, 70, 80, 90), k=7))

Здесь каждому элементу в списке присваивается собственный вес, то есть вероятный результат. Кроме того, k в приведенном выше примере - это количество элементов, необходимых для данного списка.

Выход:

[60, 84, 36, 72, 84, 84, 60]

Здесь общая сумма весов не равна 100, потому что это относительные веса, а не проценты. Число 84 встречается трижды, так как оно имеет наибольший вес среди всех весов. Так что вероятность его появления будет максимальной.

Выберите элементы с совокупным весом

Параметр cum_weight используется для определения совокупных весов. Совокупный вес элемента определяется весом предыдущего элемента плюс относительный вес этого элемента. Например, относительные веса [10, 20, 30, 40] эквивалентны кумулятивным весам [10, 30, 60, 100].

Вот пример:

import random

List = [13, 26, 39, 52, 65]
print(random.choices(List, cum_weights=(10, 30, 60, 100, 150), k=5))

Выход:

[65, 65, 39, 13, 52]

Здесь также число 65 встречается чаще, чем любое другое число, поскольку оно имеет наибольший вес.

Используйте функцию numpy.random.choice() для генерации взвешенного случайного выбора

Для генерации случайного взвешенного выбора NumPy обычно используется, когда пользователь использует версию Python ниже 3.6.

Здесь numpy.random.choice используется для определения распределения вероятностей. В этом методе берутся случайные элементы 1D-массива, а случайные элементы numpy-массива возвращаются с помощью функции choice().

import numpy as np

List = [500,600,700,800]
sNumbers = np.random.choice(List, 4, p=[0.10,0.20,0.30,0.40])
print(sNumbers)

Здесь вероятность должна быть равна 1. Число 4 представляет размер списка.

Выход:

[800 500 600 800]