Python中的random模块

Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍。如下:
random.random()

用于生成一个0到1的随机浮点数。如:

import random
random.random()

输出:

0.3701787746508932


random.uniform(a,b)

用于生成一个指定范围内的随机浮点数,两个参数一个是上线,一个是下线。如:

random.uniform(10,20)

 输出:

16.878776709127855

random.randint(a,b)

用于生成指定范围内的整数,生成上线和下线之间的随机数,如:

random.randint(10,20)

 输出:

14

random.randrange([start], stop[, step])

从指定范围内,按指定基数递增的集合中 获取一个随机数。如:

random.randrange(10, 100, 2)

结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。

random.choice(sequence)

参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。如:

random.choice((“Tuple”,”List”, “Dict”)) 

输出:

List

random.shuffle(x[, random])

用于将一个列表中的元素打乱,如:

x=[“Python”,”data”,”random”,”Mining”,”good”]
random.shuffle(x)
print x

输出:

[‘Python’, ‘Mining’, ‘good’, ‘random’, ‘data’]

random.sample(sequence, k)

从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列,如:

lists=[1,2,3,4,5,6,7,8,10]
a=random.sample(lists,3)
print a

输出:

[4, 7, 5]

 

numpy模块中有random模块,这两个模块在功能方面和性能方面有一定的差别,numpy.random模块有以下一些函数和功能模型:

numpy.random.rand(d0, d1, …, dn):

其中d0, d1, …, dn为整数(int)型,输出一个shape为(d0, d1, …, dn)的矩阵。如:

np.random.rand(3,2)

输出:

array([
          [ 0.14022471,  0.96360618],
          [ 0.37601032,  0.25528411],
          [ 0.49313049,  0.94909878]
])

numpy.random.randn(d0, d1, …, dn)

其中d0, d1, …, dn)为整数型,输出标准正太分布的矩阵。

生产的分布,则sigma * np.random.randn(…) + mu,如下:

若我们要生成满足正太分布为N(3,2.5^2),2行4列的array

2.5 * np.random.randn(2, 4) + 3

输出:

array([
         [-4.49401501,  4.00950034, -1.81814867,  7.29718677],
         [ 0.39924804,  4.68456316,  4.99394529,  4.84057254]
])

numpy.random.randint(low, high=None, size=None)

生产一定范围内的元素为整数的array。

low为下限,size为生成的array大小,如果high为none则生成0~low的均匀分布随机数,若指定了high,那么生产low~high的均匀分布随机数。如生产2×4的在(0,4)的array,则:

np.random.randint(5, size=(2, 4))

输出:

array([
         [4, 0, 2, 1],
         [3, 2, 2, 0]
])

作者: ZH奶酪——张贺 
Q Q: 1203456195 
邮箱: cheesezh@163.com 
出处: http://www.cnblogs.com/CheeseZH/ 
<think>我们被要求使用中文回答,并且按照给定的格式要求(行内数学表达式用$...$,独立公式用$$...$$并单独成段)。用户的问题是关于Python random模块生成随机数的用法。 根据引用[1]-[5],我们可以总结出random模块的常用函数和方法。我们将按照以下结构回答: 1. 引入random模块 2. 生成随机浮点数:random(), uniform(a, b) 3. 生成随机整数:randint(a, b), randrange(start, stop[, step]) 4. 随机选择:choice(seq), choices(population, weights=None, cum_weights=None, k=1) 5. 打乱顺序:shuffle(x) 6. 随机样本:sample(population, k) 7. 设置随机种子:seed(a=None, version=2) 同时,我们需要在回答末尾生成相关问题。 注意:引用标识要自然地添加在引用内容的末尾。由于引用内容来自多个引用,我们将根据内容标注引用。 开始回答:</think>### Python random模块生成随机数用法详解 Python的`random`模块提供了多种生成随机数的方法,以下是核心功能及示例: #### 1. **基础随机数生成** - **`random()`**:生成$[0.0, 1.0)$范围内的随机浮点数 ```python import random print(random.random()) # 输出如:0.548813502449 ``` - **`uniform(a, b)`**:生成$[a, b]$范围内的随机浮点数 ```python print(random.uniform(2.5, 5.5)) # 输出如:3.782 ``` #### 2. **随机整数生成** - **`randint(a, b)`**:生成$[a, b]$范围内的随机整数(含端点) ```python print(random.randint(1, 10)) # 输出如:7 ``` - **`randrange(start, stop[, step])`**:按步长生成随机整数 ```python print(random.randrange(0, 100, 10)) # 输出如:30(步长为10) ``` #### 3. **序列随机操作** - **`choice(seq)`**:从序列中随机选择一个元素 ```python fruits = ['apple', 'banana', 'cherry'] print(random.choice(fruits)) # 输出如:'banana' ``` - **`choices(population, weights=None, k)`**:带权重随机选择多个元素(可重复) ```python print(random.choices(fruits, weights=[2,1,1], k=2)) # 输出如:['apple', 'apple'] ``` - **`shuffle(x)`**:原地打乱序列顺序 ```python cards = [1, 2, 3, 4, 5] random.shuffle(cards) # 结果如:[3, 1, 5, 2, 4] ``` - **`sample(population, k)`**:从总体中抽取$k$个唯一元素(无重复) ```python print(random.sample(range(100), 5)) # 输出如:[42, 17, 88, 53, 6] ``` #### 4. **随机种子控制** - **`seed(a=None)`**:初始化随机数生成器,确保结果可复现 ```python random.seed(42) # 固定种子后,每次运行生成相同随机数 print(random.randint(1,100)) # 总是输出82 ``` #### 5. **应用场景示例** ```python # 石头剪刀布游戏(简化版) actions = ['石头', '剪刀', '布'] player_choice = input("输入选择(石头/剪刀/布): ") computer_choice = random.choice(actions) print(f"电脑出:{computer_choice}") # 胜负逻辑(此处省略)... ``` > **注意**: > - 随机数适用于模拟、游戏、抽样等场景,但**不适用于密码学**(需用`secrets`模块)[^1] > - 设置随机种子在需要可重复实验时非常关键(如机器学习)[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值