伪随机数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()")
print(random.random())
print(random.random())
print(random.random())
print("seed=45")
random.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),这主要是为了保证你明天做这个实验时得到的还是相同的结果
参考资料
https://stackoverflow.com/questions/22639587/random-seed-what-does-it-do