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