【机器学习】【数据处理】numpy.random.RandomState的用法

跟numpy.random.seed()一样刚开始理解都是很头疼的存在,但其实他们的用法几乎一样(如果有人对seed()有疑问的话可以看我的另一篇讲解:【数据处理】Numpy.random.seed()的用法 ):

numpy.random.RandomState()是一个伪随机数生成器。那么伪随机数是什么呢?

伪随机数是用确定性的算法计算出来的似来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。(摘自《百度百科》)

下面我们来看看它的用法:

import numpy as np
rng = np.random.RandomState(0)
rng.rand(4)
Out[377]: array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
rng = np.random.RandomState(0)
rng.rand(4)
Out[379]: array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])

看,是不是生成了一样的随机数组呢,这点和numpy.random.seed()还是很一样的,

因为是伪随机数,所以必须在rng这个变量下使用,如果不这样做,那么就得不到相同的随机数组了,即便你再次输入了numpy.random.RandomState()

np.random.RandomState(0)
Out[397]: <mtrand.RandomState at 0xddaa288>
np.random.rand(4)
Out[398]: array([0.62395295, 0.1156184 , 0.31728548, 0.41482621])
np.random.RandomState(0)
Out[399]: <mtrand.RandomState at 0xddaac38>
np.random.rand(4)
Out[400]: array([0.86630916, 0.25045537, 0.48303426, 0.98555979])

这是因为np.random.rand()在默认状态下,是从默认随机数组里挑出的随机样本。

rng = np.random.RandomState(0)
x = rng.randn(4)
y = rng.randn(4)
x
Out[393]: array([1.76405235, 0.40015721, 0.97873798, 2.2408932 ])
y
Out[394]: array([ 1.86755799, -0.97727788,  0.95008842, -0.15135721])
下面给出两个自定义函数来帮助更好地理解:
def rng1():
    for i in range(4):
        rng = np.random.RandomState(0)
        print("i = ",i)
        print(rng.rand(3,2))
    
rng1()
i =  0
[[0.5488135  0.71518937]
 [0.60276338 0.54488318]
 [0.4236548  0.64589411]]
i =  1
[[0.5488135  0.71518937]
 [0.60276338 0.54488318]
 [0.4236548  0.64589411]]
i =  2
[[0.5488135  0.71518937]
 [0.60276338 0.54488318]
 [0.4236548  0.64589411]]
i =  3
[[0.5488135  0.71518937]
 [0.60276338 0.54488318]
 [0.4236548  0.64589411]]
def rng2():
    rng = np.random.RandomState(0)
    for i in range(4):
        print("i = ",i)
        print(rng.rand(3,2))
    
rng2()
i =  0
[[0.5488135  0.71518937]
 [0.60276338 0.54488318]
 [0.4236548  0.64589411]]
i =  1
[[0.43758721 0.891773  ]
 [0.96366276 0.38344152]
 [0.79172504 0.52889492]]
i =  2
[[0.56804456 0.92559664]
 [0.07103606 0.0871293 ]
 [0.0202184  0.83261985]]
i =  3
[[0.77815675 0.87001215]
 [0.97861834 0.79915856]
 [0.46147936 0.78052918]]
大家现在对这个函数是不是理解很多了呢。

猜你喜欢

转载自blog.csdn.net/weixin_41571493/article/details/80550076