使用 Python 的加权随机选择

Lakshay Kapoor 2023年10月10日
  1. 使用 random.choices() 函数生成加权随机选择
  2. 使用 numpy.random.choice() 函数生成加权随机选择
使用 Python 的加权随机选择

在 Python 中,我们可以使用 Random 和 NumPy 库轻松生成随机数。

根据元素的可能结果从列表或数组中选择随机元素称为加权随机选择。元素的选择是通过为每个存在的元素分配一个概率来确定的。有时还会从制作的元素列表中选择多个元素。

在本教程中,我们将讨论如何在 Python 中生成加权随机选择。

使用 random.choices() 函数生成加权随机选择

在这里,Python 的 random 模块用于生成随机数。

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 出现了 3 次,因为它在所有权重中权重最高。所以它发生的概率是最高的。

选择具有累积权重的元素

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() 函数生成加权随机选择

为了生成随机加权选择,当用户使用低于 3.6 的 Python 版本时,通常使用 NumPy。

在这里,numpy.random.choice 用于确定概率分布。在此方法中,获取一维数组的随机元素,并使用 choice() 函数返回 numpy 数组的随机元素。

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]
作者: Lakshay Kapoor
Lakshay Kapoor avatar Lakshay Kapoor avatar

Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.

LinkedIn

相关文章 - Python Random