迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

使用 Python 的加权随机选择

作者:迹忆客 最近更新:2023/12/21 浏览次数:

在 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]

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便