Python标准库中的random模块提供了生成伪随机数的工具。以下是random模块中常用方法的详解和使用实例:
seed的定义:
seed() 函数用于设置随机数生成器的种子,它在生成随机数时提供了可重复性。这个种子是生成随机数的起始点,相同种子生成的随机数序列是确定性的,也就是说,在相同的种子下,每次生成的随机数序列都是一样的。
在很多编程语言和库中,seed() 函数被用于初始化伪随机数生成器。在 Python 中,它常常与 random 模块、numpy 库或者机器学习库(比如 PyTorch、TensorFlow)中的随机数生成相关的函数一起使用。
初始化随机数生成器的内部状态。如果不显式调用,Python会在第一次生成随机数时自动调用。使用相同的种子(seed)会产生相同的随机数序列。
import random
random.seed(10) # 设置种子
print(random.random()) # 产生一个随机数
场景:当你需要可复现的结果时,比如在科学实验、算法比赛或者调试程序时,需要保证每次运行代码产生相同的随机序列。
返回一个[0.0, 1.0)范围内的随机浮点数。
print(random.random())
场景:当你需要生成一个标准的、范围在0到1之间的随机浮点数时,例如模拟概率事件。
返回一个在[a, b]范围内的随机浮点数。
print(random.uniform(1, 10))
场景:当你需要获得一个指定范围内的随机浮点数时,例如模拟连续空间中的随机事件,比如物理模拟或者随机位置生成。
返回一个在[a, b]范围内的随机整数。
print(random.randint(1, 5))
场景:当你需要获得一个指定范围内的整数时,比如抽奖程序中抽取号码,或者选择列表中的随机索引。
返回一个在指定范围内,按照指定步长的一个随机数。
print(random.randrange(0, 10, 2)) # 生成0到10范围内的偶数
场景:和randint类似,但可以指定步长。适用于需要从连续范围内按特定间隔选择随机数的情况,如生成随机偶数。
返回序列seq的一个随机元素。
my_list = ['apple', 'banana', 'cherry']
print(random.choice(my_list))
场景:从序列中随机选择一个元素时使用,例如从一副牌中随机抽取一张牌。
返回一个列表,用于从population序列中随机选取k个元素。weights或cum_weights参数可以指定元素的选取概率。
weights = [10, 1, 1]
print(random.choices(my_list, weights=weights, k=2))
场景:从序列中随机抽取多个元素,并允许重复抽取和元素抽取概率不均时使用。例如,根据人口分布数据模拟人口抽样调查。
从population序列或集合中随机选取k个不重复的元素,以列表形式返回。
print(random.sample(my_list, 2))
场景:当你需要从集合中抽取不重复的随机元素时,比如随机分配门票编号或是洗牌时抽取指定数量的不重复卡牌。
将序列x中的元素随机打乱位置。如果指定了random参数,则应为一个无参函数,用于生成随机数。
random.shuffle(my_list)
print(my_list)
场景:用于打乱序列中元素的顺序,例如在洗牌、随机排序或者生成随机排列时使用。
生成一个k比特长度的随机整数。
print(random.getrandbits(16)) # 生成一个16位比特长度的随机整数
场景:当需要较大的随机整数时,如生成随机密钥或者其他需要大量随机比特的场景。
产生一个服从高斯分布(也叫正态分布)的随机数,其平均值为mu,标准差为sigma。
print(random.gauss(0, 1)) # 产生一个平均值为0,标准差为1的高斯分布随机数
场景:当你需要生成服从高斯分布的随机数时,比如在统计模拟或者加入噪声到科学数据中。
⚠️使用random模块时要注意,生成的随机数是伪随机数。也就是说,它们通过算法产生的,并不是真正的随机,但对于大多数应用来说是足够好的。而且,由于这些数是由算法生成的,所以重复使用相同的种子将产生相同的随机数序列。这在测试和调试时是非常有用的,因为可以重现随机事件。