Pytho学习——np.random.seed()用法

在Python的第三方包中,numpy是个功能非常强大的扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
在看程序时,遇到了一句代码np.random.seed(0),不知道是什么意思,经过搜寻资料,于是写下本文,方便以后查看。

np.random.seed(int)用于制定随机数生成时所用算法开始的整数值,使得随机数据可预测。如果使用相同的seed()值,则每次产生的随机数都相同;如果不设置这个值,则系统根据时间来自己选择这个值,因此每次生成的随机数会因为时间差异而不同。

在while循环中,np.random.seed(int)位置不同,运行结果也不同。
示例1:

import numpy as np

num = 0
while num < 5:
	np.random.seed(0)
	print(np.random.random())
	num += 1

运行结果为:

0.5488135039273248
0.5488135039273248
0.5488135039273248
0.5488135039273248
0.5488135039273248

示例2:

import numpy as np

num = 0
np.random.seed(0)

while num < 5:
    print(np.random.random())
    num += 1

运行结果为:

0.5488135039273248
0.7151893663724195
0.6027633760716439
0.5448831829968969
0.4236547993389047

结论:
在示例1中,np.random.seed(0)定义在了while循环内部,在这五次循环输出随机数之前,都重新设置了相同的seed()值,所以每次输出的随机数都是一样的。
在示例2中,np.random.seed(0)定义在了while循环外部,先制定了seed()值,然后在这个固定的值的条件下,依次取出五个随机数,所以每次的结果都不同。

示例三

import numpy as np

num = 0
while num < 5:
    print('第%d次运行' % (num + 1))
    A = np.random.random([1, 2])
    print('A is: ', A)

    np.random.seed(0)
    B = np.random.random([1, 3])
    print('B is: ', B)

    num += 1

运行结果:

1次运行
A is:  [[0.7164272  0.57497379]]
B is:  [[0.5488135  0.71518937 0.60276338]]2次运行
A is:  [[0.54488318 0.4236548 ]]
B is:  [[0.5488135  0.71518937 0.60276338]]3次运行
A is:  [[0.54488318 0.4236548 ]]
B is:  [[0.5488135  0.71518937 0.60276338]]4次运行
A is:  [[0.54488318 0.4236548 ]]
B is:  [[0.5488135  0.71518937 0.60276338]]5次运行
A is:  [[0.54488318 0.4236548 ]]
B is:  [[0.5488135  0.71518937 0.60276338]]

在这个例子的while循环中,当num=0时,先随机生成A数组,之后定义了seed()值,也就是在循环体中,将随机生成数字的初始值固定了,输出了B数组,接着num=2时,由于seed已经固定了,所以以后会输出固定的A,B数组。
但是,如果我们将下面的程序多次运行,A每次运行结果都不同,B每次都是固定的。因为这这是一个完整的程序,A是一个随机的数组,执行完A后,设置了seed(),所以只对后面的B有效,且执行输出B后,程序结束,每次重复运行,不会影响A的随机性。

import numpy as np

A = np.random.random([1, 2])
print('A is: ', A)

np.random.seed(0)
B = np.random.random([1, 3])
print('B is: ', B)

你可能感兴趣的:(Python)