Python伪随机数random和seed详解


一、伪随机数random和seed

初始化随机数生成器:random.seed(a=None)

  • 如果 a 被省略或为 None ,则使用当前系统时间
  • 每给定一个seed,它会生成一个序列,如序列X: 0.1,3.2,1.5,9.7…
    你每次random.random()只是按顺序取了一个X中的点

对于同一个seed,它产生的序列是固定的,所以随机化结果必然相同,而系统时间在不断变大,所以产生的序列必然不同

二、Python代码示例

import random
print("不加seed语句时,默认是用random.seed()") # 即使用当前的系统时间为seed
print(random.random())
print(random.random())
print(random.random())
print("seed=45")
random.seed(45) # 指定seed为45
print(random.random())  # 取seed=45产生序列的第一个元素
print(random.random())  # 取seed=45产生序列的第二个元素
print(random.random())  # 取seed=45产生序列的第三个元素

print("\nseed=45")
random.seed(45)
print(random.random())
print(random.random())
print(random.random())

print("\nseed=当前系统时间")
random.seed()  # 默认是当前系统时间
print(random.random())
print(random.random())
print(random.random())

print("\nseed=当前系统时间")
random.seed()
print(random.random())
print(random.random())
print(random.random())

三、输出结果

不加seed语句时,默认是用random.seed()
0.20832862243131767
0.4210403813034972
0.4153058477463908
seed=45
0.2718754143840908
0.48802820785090784
0.08187934237116656

seed=45
0.2718754143840908
0.48802820785090784
0.08187934237116656

seed=当前系统时间
0.9664157011016027
0.9963620166960119
0.00929090874812366

seed=当前系统时间
0.1560896344276015
0.26724242598166137
0.5839125852630351

四、应用场景

Weka每次会初始化随机生成器(给定一个特定seed),这主要是为了保证你明天做这个实验时得到的还是相同的结果

Reference


Author: SHWEI
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source SHWEI !
评论
 Previous
【ICML 2020联邦学习论文解读】SCAFFOLD: Stochastic Controlled Averaging for Federated Learning 【ICML 2020联邦学习论文解读】SCAFFOLD: Stochastic Controlled Averaging for Federated Learning
论文解读:SCAFFOLD: Stochastic Controlled Averaging for Federated Learning 作者:Sai Praneeth Karimireddy 主页, Satyen Kale, Mehry
2020-10-28
Next 
详解git clone --depth=1的用法 详解git clone --depth=1的用法
前言 本文以GitHub仓库 https://github.com/labuladong/fucking-algorithm 为例,详细介绍git clone --depth=1的用法 情况一:git clonegit clone htt
2020-09-04
  TOC