当前位置: 首页 > news >正文

【Python3】random.choices 权重随机选取 详解

random.choices是Python 3中random模块中的一个函数,用于从指定的序列中以指定的权重随机选择元素。下面我将对该函数进行详细介绍,并提供一些示例代码和注意事项。

函数签名:

random.choices(population, weights=None, *, cum_weights=None, k=1)

参数说明:

  • population:指定要从中进行随机选择的序列,可以是列表、元组、字符串或其他可迭代对象。
  • weights(可选):指定每个元素的权重列表,列表中的每个值必须是非负数。如果未提供此参数,则每个元素的权重被假定为相等,即等概率选择。
  • cum_weights(可选):类似于weights,但是是累积权重列表,即每个元素的权重是从序列开头到该元素位置的累积和。如果提供了cum_weights,则weights参数会被忽略。
  • k:指定要选择的元素数量,即随机选择的样本数。默认值为1,即选择一个元素。

返回值:

  • 返回一个列表,包含随机选择的元素。

注意事项:

  • 如果population为空,则会引发IndexError异常。
  • 如果weightscum_weights同时提供,则会引发ValueError异常。
  • 如果weightscum_weights中包含负数,则会引发ValueError异常。
  • 如果提供了cum_weights,则其长度必须与population的长度相同。

示例代码:

import random# 例子1:等概率选择
population = ['A', 'B', 'C', 'D', 'E']
choices = random.choices(population, k=3)
print("例子1结果:", choices)# 例子2:使用权重进行选择
weights = [1, 2, 3, 4, 5]  # 元素C的权重最高
choices_weighted = random.choices(population, weights=weights, k=3)
print("例子2结果:", choices_weighted)# 例子3:使用累积权重进行选择
cum_weights = [1, 3, 6, 10, 15]  # 累积权重,相当于[1, 1+2, 1+2+3, 1+2+3+4, 1+2+3+4+5]
choices_cum_weighted = random.choices(population, cum_weights=cum_weights, k=3)
print("例子3结果:", choices_cum_weighted)

结果解释:

  • 例子1中,由于未提供权重,因此每个元素被选择的概率相等。
  • 例子2中,元素E的权重最高,因此被选中的概率最大。
  • 例子3中,通过累积权重,元素D的累积权重最高,因此被选中的概率最大。
http://www.lryc.cn/news/362258.html

相关文章:

  • 【面试题-015】Redis的线程模型是什么 为什么速度快
  • EasyV开发人员的使用说明书
  • 构造列表初始化和构造初始化区别
  • Message passing mechanism (消息传递机制)
  • 详解 Spark SQL 代码开发之数据读取和保存
  • Pulsar 社区周报 | No.2024-05-30 | BIGO 百页小册《Apache Pulsar 调优指南》
  • 第二证券股票杠杆:4分钟直线涨停!这一赛道,AH股集体爆发!
  • JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓
  • 斜拉桥智慧施工数字孪生
  • 【chatGPT API】Function Calling:将自然语言转换为API调用或数据库查询
  • Oracle Hint /*+APPEND*/插入性能总结
  • 正邦科技(day3)
  • mac电脑多协议远程管理软件:Termius 8.4.0激活版下载
  • 网络攻击的常见形式
  • ReactDOM 18版本 使用createRoot 替换render详解
  • 【赠书活动】好书推荐—《详解51种企业应用架构模式》
  • SpringBoot启动时使用外置yml文件
  • 【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库
  • vue从入门到精通(六):数据代理
  • 【C++修行之道】类和对象(二)类的6个默认成员函数、构造函数、析构函数
  • 【LeetCode热题100总结】239. 滑动窗口最大值
  • 【YOLOv9改进[Conv]】使用YOLOv10的空间通道解耦下采样SCDown模块替换部分CONv的实践 + 含全部代码和详细修改内容
  • 简单小游戏制作
  • Delphi
  • Linux的shell脚本中的比大小
  • 每日复盘-20240603
  • adb server version (22000) doesn‘t match this client (41); killing...
  • 如何使用 Connector API 将数据提取到 Elasticsearch Serverless 中
  • 体育赛事直播系统开发源码搭建
  • 使用Jmeter进行性能测试