python-numpy随机种子

numpy 随机种子

numpy.random.seed()的使用

seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

需要指出的是,numpy.random.seed()一次有效的。也就是说,numpy.random.seed()设置了之后只对后面最近的random随机数有效,举个例子:

 1import numpy as np
 2# 第一个for循环
 3np.random.seed(1)
 4print('第一个for循环')
 5for i in range(5):
 6    print(np.random.rand())
 7print('-----------------\n')
 8# 第二个for循环
 9print('第二个for循环')
10for i in range(5):
11    np.random.seed(1)
12    print(np.random.rand())
 1第一个for循环
 20.417022004702574
 30.7203244934421581
 40.00011437481734488664
 50.30233257263183977
 60.14675589081711304
 7-----------------
 8
 9第二个for循环
100.417022004702574
110.417022004702574
120.417022004702574
130.417022004702574
140.417022004702574

第一个for循环中,只设置了一次seed,所以之后的随机值都是不一样的。而第二个for循环中,每次都设置了seed才得到一样的值。仔细看,可以发现第一个for循环里第一个随机值和第二个for循环里的值也是一样的,都是以seed(5)为种子生成的随机值。

numpy.random.RandomState()使用

numpy.random.RandomState()是一个伪随机数生成器。和seed()一样也是一次有效的,但是它指定了一个state变量,只有在这个state变量下,才会使用RandomState()的种子。

1# 设置随机种子
2rng = np.random.RandomState(5)
3# 没有使用rng变量
4print(np.random.rand())
5# 使用rng变量
6print(rng.rand())
7rng = np.random.RandomState(5)
8print(rng.rand())
10.00011437481734488664
20.22199317108973948
30.22199317108973948

这个例子看出,虽然距离RandomState(5)最近的是np.random.rand(),但是没有使用RandomState(5)的种子。