Random and seed
所有标准库提供的Random函数其实都是假Random,真正的Random函数式不需要Seed的。
所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 
通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前时钟的毫秒来做Seed,因为毫秒对你来说是一个1000以内的随机数字。 这样可以大大改善标准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。
1 2
   | import numpy as np import random
   | 
 
1 2 3 4 5 6
   | 
 
  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]]
1 2 3 4
   |  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]]
1 2 3
   | import random random.seed(1) random.random()
   | 
 
0.13436424411240122
1 2
   | random.seed(1) random.random()
   | 
 
0.13436424411240122
1 2
   | 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]])
1 2
   | 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