在学习人工智能时,大量的使用了np.random.seed(),利用随机数种子,使得每次生成的随机数相同。
我们带着2个问题来进行下列实验
- np.random.seed()是否一直有效
- np.random.seed(Argument)的参数作用?
例子1
import numpy as np
if __name__ == '__main__':
    i = 0
    while (i < 6):
        if (i < 3):
            np.random.seed(0)
            print(np.random.randn(1, 5))
        else:
            print(np.random.randn(1, 5))
            pass
        i += 1
    print("-------------------")
    i = 0
    while (i < 2):
        print(np.random.randn(1, 5))
        i += 1
    print(np.random.randn(2, 5))
    print("---------重置----------")
    np.random.seed(0)
    i = 0
    while (i < 8):
        print(np.random.randn(1, 5))
        i += 1
结果:
[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]
[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]
[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]
[[-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]
[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 0.33367433  1.49407907 -0.20515826  0.3130677  -0.85409574]]
-------------------
[[-2.55298982  0.6536186   0.8644362  -0.74216502  2.26975462]]
[[-1.45436567  0.04575852 -0.18718385  1.53277921  1.46935877]]
[[ 0.15494743  0.37816252 -0.88778575 -1.98079647 -0.34791215]
 [ 0.15634897  1.23029068  1.20237985 -0.38732682 -0.30230275]]
---------重置----------
[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]
[[-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]
[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 0.33367433  1.49407907 -0.20515826  0.3130677  -0.85409574]]
[[-2.55298982  0.6536186   0.8644362  -0.74216502  2.26975462]]
[[-1.45436567  0.04575852 -0.18718385  1.53277921  1.46935877]]
[[ 0.15494743  0.37816252 -0.88778575 -1.98079647 -0.34791215]]
[[ 0.15634897  1.23029068  1.20237985 -0.38732682 -0.30230275]]
可以看出,
np.random.seed()对后面的随机数一直有效。
两次利用随机数种子后,即便是跳出循环后,生成随机数的结果依然是相同的。第一次跳出while循环后,进入第二个while循环,得到的两个随机数组确实和加了随机数种子不一样。但是,后面的加了随机数种子的,八次循环中的结果和前面的结果是一样的。说明,随机数种子对后面的结果一直有影响。同时,加了随机数种子以后,后面的随机数组都是按一定的顺序生成的。
例子2,随机数种子参数的作用
import numpy as np
if __name__ == '__main__':
    i = 0
    np.random.seed(0)
    while (i < 3):
        print(np.random.randn(1, 5))
        i += 1
    i = 0
    print("---------------------")
    np.random.seed(1)
    i = 0
    while (i < 3):
        print(np.random.randn(1, 5))
        i += 1
结果:
[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]
[[-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]
[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
---------------------
[[ 1.62434536 -0.61175641 -0.52817175 -1.07296862  0.86540763]]
[[-2.3015387   1.74481176 -0.7612069   0.3190391  -0.24937038]]
[[ 1.46210794 -2.06014071 -0.3224172  -0.38405435  1.13376944]]
当随机数种子参数为0和1时,生成的随机数结果相同。说明该参数指定了一个随机数生成的起始位置。每个参数对应一个位置。并且在该参数确定后,其后面的随机数的生成顺序也就确定了。
所以,随机数种子的参数怎么选择?这个参数只是确定一下随机数的起始位置,可随意分配。
 
                             
        