python random and seed tutorial


Random and seed

所有标准库提供的Random函数其实都是假Random,真正的Random函数式不需要Seed的。

所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。

通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前时钟的毫秒来做Seed,因为毫秒对你来说是一个1000以内的随机数字。 这样可以大大改善标准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。

import numpy as np
import random
# random.seed(1)
# np.random.seed(1)
#只要seed一样,不管运行多少次,每次产生的随机数都一样。
np.random.seed(1)
print np.random.rand(2,3)
print np.random.rand(3,1)
[[  4.17022005e-01   7.20324493e-01   1.14374817e-04]
 [  3.02332573e-01   1.46755891e-01   9.23385948e-02]]
[[ 0.18626021]
 [ 0.34556073]
 [ 0.39676747]]
#只要seed一样,不管运行多少次,每次产生的随机数都一样。
np.random.seed(1)
print np.random.rand(2,3)
print np.random.rand(3,1)
[[  4.17022005e-01   7.20324493e-01   1.14374817e-04]
 [  3.02332573e-01   1.46755891e-01   9.23385948e-02]]
[[ 0.18626021]
 [ 0.34556073]
 [ 0.39676747]]
import random
random.seed(1)
random.random()
0.13436424411240122
random.seed(1)
random.random()
0.13436424411240122
np.random.seed(1)
np.random.randint(0,6, size=(4,5))
array([[5, 3, 4, 0, 1],
       [3, 5, 0, 0, 1],
       [4, 5, 4, 1, 2],
       [4, 5, 2, 4, 3]])
np.random.seed(1)
np.random.randint(0,6, size=(4,5))
array([[5, 3, 4, 0, 1],
       [3, 5, 0, 0, 1],
       [4, 5, 4, 1, 2],
       [4, 5, 2, 4, 3]])

Reference

History

  • 20180806: created.

Author: kezunlin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source kezunlin !
评论
  TOC