np.random.RandomState()和np.random.seed()的区别

np.random.RandomState()

介绍

当给定一个数字作为参数传入时,他会生成一个随机数生成器,生成器.rand()即可获得随机数,

我们可以把传入的数字看做是随机数生成器的id(唯一)

之后无论我们重复运行这个.py文件多少次,哪怕你把电脑重启了,只要再一次运行这个.py文件,他都始终产生同一个随机数(可复现性),比如下面这段代码

import numpy as np
rng = np.random.RandomState(2)
x = rng.rand()
print(x)
结果是
0.43599490214200376

使用注意事项

既然我们上面说了随机数生成器是有唯一id的,那生成的随机数就应当是唯一的,这样才能可复现啊,但下面这段代码x和y的结果却不同,

import numpy as np
rng = np.random.RandomState(2)
x = rng.rand()
y = rng.rand()
print(x)
print(y)
结果是
0.43599490214200376
0.025926231827891333

其实这样才能真正帮助到可复现性,使用同一个变量rng来randn()将会使得我们重复运行文件仍然得到同样的一堆随机数,也就是上面代码中的x和y了

那如果我就是要得到相同的随机数该怎么弄呢?

这里可以发现,写一次生成器,用一次randn,就可以实现上述效果了

import numpy as np
rng = np.random.RandomState(2)
x = rng.rand()

rng = np.random.RandomState(2)
y = rng.rand()
print(x)
print(y)
结果是
0.43599490214200376
0.43599490214200376

还有一点,.rand()里面也是可以传数字参数的,代表要生成的随机数个数

import numpy as np
rng = np.random.RandomState(2)
x = rng.rand(4)
print(x)
结果是
[0.4359949  0.02592623 0.54966248 0.43532239]

np.random.seed()

看了上面那个np.random.RandomState(),这里就很简单了,

同样的特性,也就是传入唯一的数字id,从此它对应生成的随机数都是唯一的,.

同样也要注意,写一次np.random.seed(),用一次np.random.rand(),这样才能保证随机数唯一

import numpy as np
np.random.seed(2)
a=np.random.rand(4)
print(a)

b=np.random.rand(4)
print(b)

np.random.seed(2)
c=np.random.rand(4)
print(c)

结果是
[0.4359949  0.02592623 0.54966248 0.43532239]
[0.4203678  0.33033482 0.20464863 0.61927097]
[0.4359949  0.02592623 0.54966248 0.43532239]

你可能感兴趣的:(python)