python应用之random模块(居然还有那么多的随机算法函数)

news2024/9/25 13:24:33

       random 是 Python 的一个常用的内置模块,模块提供了生成随机数的功能,包含了多种生成随机数的函数,比如生成随机整数、随机浮点数、从序列中随机选择元素等。

使用 random模块

要使用 random模块,直接导入它即可。

import random

以下是random模块提供的主要函数:

常用方法介绍:

1. random()

生成一个[0.0, 1.0)范围内的不包含整数1随机浮点数(大于等于0,小于1的小数)。

测试代码:

print(random.random())

执行后结果:

0.3336493107060039

如果想保留小数,可以用round函数或者decimal.Decimal函数

1)使用round函数保留几位小数,在round第2个参数中传入数字几,比如保留3位小数

print(round(random.random(),3))

2)使用Decimal函数,保留3位小数

from decimal import Decimal
print(Decimal(str(random.random())).quantize(Decimal('0.000')))

Decimal模块的用法可参见之前的文章:浮点数精度介绍

2. randint(a, b)

生成一个指定范围内的随机整数,包括a和b的值

测试代码:

print(random.randint(1,100))

多次执行后结果:

69

19

67

3 randrange(start, stop=None, step=1)

从指定的范围内返回一个随机整数,类似于range()函数。randint函数其实调用的也是该函数。

关于参数:

  • 如果不传stop和step参数,start参数必须大于0,否则报错。此时会随机生成比start小的整数。
  • 如果不传stop,传的step参数必须等于1,否则会报错。
  • 如果传了stop和step参数,step不等于1时则随机生成一个start和stop之间步长为step的整数。step=1时生成在start和stop之间,并且小于stop的数(不同于randint函数)

具体的按照step计算方式参考源代码:

测试代码:

#随机生成1到1000步长为10的整数

print(random.randrange(1,1000,10))

#随机生成5到99之间的整数

print(random.randrange(5,100))

#随机生成小于100的整数

print(random.randrange(100))

4. choice(seq)

从非空序列seq中随机选取一个元素。seq是支持切片的对象,比如列表list,元组tuple,字符串str,字节串bytes等。

测试代码:

seq_list = [1,2,3]
print(random.choice(seq_list))

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

从给定的序列中随机选择1个或者多个元素,返回的是列表list;我们可以指定每个元素被选中的概率,或者指定要选择的元素数量。该函数在Python 3.6及更高版本中才支持。

参数:

  • population:一个支持切片的序列,用于从中随机选择元素。
  • weights(可选):一个序列,指定了population中每个元素被选中的相对概率;weights的长度需要等于population的长度;默认情况下,所有元素的选中概率是相等的。
  • k(可选):一个整数,指定要选择的元素数量。默认为1。K可以大于序列的长度。
  • cum_weights(可选):一个序列,用于指定累积权重。cum_weights的长度需要等于population的长度;如果提供了cum_weights,则不能传weights,否则报错;累积权重的值应该由小到大。

测试代码:

# 示例1:从列表中随机选择两个元素
print(random.choices(seq_list, k=2))

# 示例2:从列表中随机选择4个元素 元素会重复
print(random.choices(seq_list, k=6))

# 示例3:指定权重
weights = [1, 3, 1,1,1] # 数字2被选中的概率是其他数字的三倍
print(random.choices(seq_list, weights=weights, k=2))

# 示例4:使用累积权重 值由小到大
cum_weights = [3, 4, 5,10,20]
print(random.choices(seq_list, cum_weights=cum_weights, k=2))

# 示例5:使用累积权重 权重值由大到小
cum_weights = [20, 10, 5,3,1]
print(random.choices(seq_list, cum_weights=cum_weights, k=2))

结果:前4个每次执行结果可能不同,最后一个因为权重设置问题每次都是结果[1,1]

[4, 5]

[2, 3, 4, 3, 4, 2]

[2, 1]

[1, 5]

[1, 1]

6 shuffle(x,random=none)

用于打乱序列x的元素。函数会直接修改序列x,没有return。

参数:

  • x : 支持切片的序列
  • random:默认为none,也可以传random.random函数。不过该参数从Python 3.9开始,将在后续版本中删除。

测试代码:

seq_list = [1,2,3,4,5]
random.shuffle(seq_list)
print(seq_list)

random.shuffle(seq_list,random.random)
print(seq_list)

结果:

[1, 3, 5, 4, 2]

[5, 2, 1, 4, 3]

7 sample(population, k,*,counts=None)

从指定的序列population中随机获取k个不重复的元素,并返回一个list。

参数:

  • population:一个支持切片的序列,用于从中随机选择元素。
  • k:一个整数,指定要选择的元素数量。K不能大于序列的长度。
  • counts:可以指定序列population中元素重复的次数;传入的是一个数字元素的序列,序列长度跟population一致;数字越大,元素重复的次数变多,意味着被随机到的概率也会变大,也会返回相同的元素;如果不带这个参数,返回的元素不会重复。

举例:

seq_list = [1,2,3]
counts = [2,2,1]

上述seq_list 等同于[1,1,2,2,3], 第1个和第2个元素重复2次。

测试代码:

seq_list = [1,2,3,4,5]
#随机返回2个元素
print(random.sample(seq_list,2))

#每个元素重复2次,随机返回2个元素
print(random.sample(seq_list,2,counts=[2,2,2,2,2]))

8 randbytes(n)

随机生成n个字节的字节码。

测试代码:

print(random.randbytes(20)) #20个字节

结果:

b'\xff\x19\xb7*{\x88\x9d\xb5\xea-\x10\x1dA}\xa9\xce\xaf$\xf8\x0f'

9 getrandbits(k)

随机生成k个比特位bit(1个字节=8的比特位),返回一个在范围在[0, 2**k) 范围内的随机整数。上面的randbytes函数调用的就是该函数。

测试代码:

print(random.getrandbits(20))

结果: 每次执行结果不同

503161

10 seed(a=None,version=2)

设置a等于某个值时,确保每次运行程序时生成的随机数序列都是相同的。保持默认值,每次运行程序时生成的随机数序列可能会不同。

测试代码:

random.seed('a')
print(random.randbytes(20))
print(random.getrandbits(20))

每次执行后结果都一样

11 uniform(a,b)

生成一个在指定范围内[a, b](包含a和b)的随机浮点数。a和b可以是整数或者浮点数。

测试代码:

print(random.uniform(0.1,10))

执行后返回的浮点数每次都不同

3.1062124017808896

12 其他几个函数

  • normalvariate(mu,sigma): 返回一个符合正态分布(均值为mu,标准差为sigma)的随机浮点数。
  • gauss (mu,sigma): 同normalvariate功能。
  • triangular(low=0.0, high=1.0, mode=None): 返回一个生成三角形分布的随机数。
  • lognormvariate(mu,sigma): 返回一个符合对数正态分布(均值为mu,标准差为sigma)的随机浮点数。
  • expovariate(lambd)函数用于生成一个符合指数分布的随机浮点数。lambd必须是大于0的浮点数。
  • vonmisesvariate(mu, kappa)函数用于生成一个符合冯·米塞斯(Von Mises)分布的随机浮点数。
  • gammavariate(alpha, beta)函数用于生成一个符合伽马(Gamma)分布的随机浮点数。
  • betavariate(alpha, beta)函数用于生成一个符合贝塔(Beta)分布的随机浮点数。
  • paretovariate(alpha)函数用于生成一个符合帕累托(Pareto)分布的随机浮点数。
  • paretovariate(alpha, beta)函数用于生成威布尔(Weibull)分布的随机数。

内容比较多,欢迎大家点赞收藏后学习。

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring揭秘09-aop03-aop织入器织入横切逻辑与自动织入

文章目录 【README】【1】spring aop的织入【1.1】使用ProxyFactory 作为织入器【1.2】基于接口的代理(JDK动态代理,目标类实现接口)【补充】 【1.2】基于类的代理(CGLIB动态代理,目标类没有实现接口)【1.2…

Nginx: 配置项之autoIndex模块与Nginx变量

autoIndex模块 autoindex模块它所实现的一个基本功能,是当用户请求以 / 结尾式的URL,它会列出对应的目录结构比如说, 在实际的生态环境中,内部系统可能经常需要为用户提供一些下载功能。可能需要列出来某一个磁盘上的一个文件, 比…

【D-DCVRP】求解DCVRP改进贪婪算法(三)

一、Held-Harp模型 海尔德和卡尔普在1970年提出景点模型,用于求解TSP问题的最优解下界 该模型同样可以用于DCVRP问题,既有定理1成立。 定理1:根据Held-Karp模型使用向量 π = ( 0 , π 1 , π 2 , ⋯   , π n ) \pi=(0,\pi_1,\pi_2,\cdots,\pi_n) π=(0,π1​,π2​,⋯…

Datawhale第五期夏令营-CV竞赛

CV竞赛 0.赛事报名租用4090 1.开始运行下载文件提交结果 2.内容解释赛题背景赛题目标社会价值评分规则baseline精读代码什么是YOLO 主要代码内容精读使用Ultraalytics运行代码 0.赛事报名 赛事官网:https://www.marsbigdata.com/competition/details?id3839107548872 租用40…

【Redis】RDB和AOF持久化

RDB和AOF持久化 一、什么是持久化?二、RDB三、AOF 一、什么是持久化? 数据一般写在内存上,但是当重新启动计算机内存数据是会丢失的,而硬盘中的数据是不会丢失的,所以,当我们把数据从内存放到硬盘中的话就…

解决Windows下载完anaconda之后,在pycharm中使用anaconda

怎么下载anaconda我就不详细讲了,就是官方下载基本嫩都是下一步下一步你就可以 一、首先配置环境变量如图 二、查看anaconda情况 三、打开pycharm,如下图操作 ## 注意这里的.bat文件需要在你下载到的anaconda中去找 完毕

6款ai智能文章改写软件,轻松实现文章自动改写

在内容创作领域,改写文章是一项费时费力的工作。为了让创作者从繁琐的改写任务中解脱出来,本文将为你详细介绍六款ai智能文章改写软件,助你轻松实现文章自动改写,提升创作效率。 一、创作者的痛点:文章改写的挑战 作为…

【C++ Primer Plus习题】5.5

问题: 解答: #include <iostream> using namespace std;#define MONTHSCOUNT 12int main() {string months[MONTHSCOUNT] { "January","February","March","April","May","June","July","…

高斯混合模型原理及Python实践

高斯混合模型&#xff08;Gaussian Mixture Model&#xff0c;简称GMM&#xff09;是一种统计学中的概率模型&#xff0c;用于表示由多个高斯分布&#xff08;正态分布&#xff09;混合组成的数据集合。其核心原理基于假设数据集中的每个数据点都是由多个潜在的高斯分布之一生成…

SAP商业地产管理(RE-FX)

SAP 提供了多个模块来支持租赁业务流程和会计处理&#xff0c;这些模块包括但不限于&#xff1a; SAP Leasing&#xff1a;这是一个为租赁公司提供的行业解决方案&#xff0c;支持从租赁起源到中期变更和租赁结束选项的所有阶段的业务流程。SAP Leasing 集成了 SAP CRM 和 SAP …

Java 中的 BIO, NIO, AIO 原理以及示例代码

本文参考&#xff1a; https://blog.csdn.net/yhl_jxy/article/details/79335692 https://www.cnblogs.com/cuzzz/p/17290070.html https://www.cnblogs.com/cuzzz/p/17473398.html https://pdai.tech/md/java/io/java-io-nio-select-epoll.html 最近准备看 Kafka 源码&#xf…

2-76 基于matlab的加权平均融合算法

基于matlab的加权平均融合算法&#xff0c;进行灰度或彩色多模态医学图像融合&#xff0c;程序具体很好的通用性&#xff0c;提供图像融合客观评价指标&#xff0c;还给出3组珍贵的已配准的图像。程序已调通&#xff0c;可直接运行。 2-76 多模态医学图像融合 - 小红书 (xiaoho…

C语言 之 浮点数在内存中的存储 详细讲解

文章目录 浮点数浮点数的存储浮点数的存储浮点数的读取例题 浮点数 常见的浮点数&#xff1a;3.14159、1E10&#xff08;表示1*10^10&#xff09;等 浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围在float.h 中有定义 浮点数的存储 浮点数…

一个证券交易系统的设计

时间&#xff1a;2024年08月25日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频&#xff1a;https://xima.tv/1_JAlD44?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋内推一下&#xff0c…

墨者学院 手工注入题解(oracle数据库)

简介 Oracle 数据库系统&#xff0c;是美国ORACLE公司&#xff08;甲⻣⽂&#xff09;提供的以分布式数据库为核⼼的⼀组软件 产品。是⽬前世界上使⽤最为⼴泛的&#xff0c;数据库管理系统。 以下是手工注入的流程&#xff1a; 1、判断注入点 使用 and 11 进行拼接 2、确定…

C语言-实参和形参数据传递的特点及使用技巧

&#x1f30f;个人博客&#xff1a;尹蓝锐的博客 引言&#xff1a; 在我们介绍实参和形参数据传递的特点及使用技巧之前&#xff0c;我们先拿一个有关值传递的典型错误案例来剖析一下。 典型错误举例&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h&g…

学习笔记——TypeScript

文章目录 介绍TS增加类型支持的原因&#xff1a;安装typescript运行TS文件TS常用类型类型标注位置字符串类型、数字类型、布尔类型字面量类型interface类型class类 总结 开发阶段规范代码&#xff0c;使代码更严谨 介绍 TypeScript&#xff08;简称&#xff1a;TS&#xff09;…

《操作系统---PV操作》(同步与互斥)

一、练习题 面包师有很多面包&#xff0c;由n名销售人员推销。每名顾客进店后按序取一个号&#xff0c;并且等待叫号&#xff0c;当一名销售人员空闲时&#xff0c;就按序叫下一个号。可以用两个整型变量来记录当前的取号值和叫号值&#xff0c;试设计一个使销售人员和顾客同步…

PyTorch深度学习模型训练流程的python实现:回归

回归的流程与分类基本一致&#xff0c;只需要把评估指标改动一下就行。回归输出的是损失曲线、R^2曲线、训练集预测值与真实值折线图、测试集预测值散点图与真实值折线图。输出效果如下&#xff1a; 注意&#xff1a;预测值与真实值图像处理为按真实值排序&#xff0c;图中呈现…

聚合智链已获道富环球投资,正式上线AI合约策略资金托管平台

全球最大的托管银行之一道富环球首次进军加密货币领域&#xff0c;聚合智链获得其投资支持&#xff0c;打造出全球领先的AI合约策略资金托管平台&#xff0c;将在2024年8月 28 日正式上线。 道富环球集团的总部位于美国&#xff0c;其成立于1792年&#xff0c;是一家专注于托管…