本文原址:【數(shù)據(jù)處理】Numpy.random.seed()
?剛開始看到numpy.random.seed(0)這個用法看不太懂,尤其是seed()括號里的數(shù)字總是不同時硝全,更是懵逼。
類似的取隨機數(shù)的還有這個:【數(shù)據(jù)處理】numpy.random.RandomState的用法
其實,設置seed()里的數(shù)字就相當于設置了一個盛有隨機數(shù)的“聚寶盆”棉胀,一個數(shù)字代表一個“聚寶盆”,當我們在seed()的括號里設置相同的seed冀膝,“聚寶盆”就是一樣的唁奢,那當然每次拿出的隨機數(shù)就會相同(不要覺得就是從里面隨機取數(shù)字,只要設置的seed相同取出地隨機數(shù)就一樣)窝剖。如果不設置seed麻掸,則每次會生成不同的隨機數(shù)。(注:seed括號里的數(shù)值基本可以隨便設置哦)
但是有時候你明明設置了seed()沒有變赐纱,但生成的隨機數(shù)組還是不同脊奋,這是怎么回事呢熬北?請看:
importnumpyasnp
np.random.seed(0)
np.random.rand(10)
Out[357]:
array([0.5488135,0.71518937,0.60276338,0.54488318,0.4236548,
0.64589411,0.43758721,0.891773,0.96366276,0.38344152])
np.random.rand(10)
Out[358]:
array([0.79172504,0.52889492,0.56804456,0.92559664,0.07103606,
0.0871293,0.0202184,0.83261985,0.77815675,0.87001215])
大家一定會奇怪,咦诚隙?為什么會不一樣讶隐,我不是已經(jīng)設置了seed沒變么?
其實久又,第二遍的np.random.rand(10)已經(jīng)不是在你設置的np.random.seed(0)下了巫延,所以第二遍的隨機數(shù)組只是在默認random下隨機挑選的樣本數(shù)值。
那我們該怎么讓兩次隨機數(shù)組一樣呢地消?
我們只需要再輸入一遍np.random.seed(0)就好了炉峰,請看:
np.random.seed(0)
np.random.rand(4,3)
Out[362]:
array([[0.5488135,0.71518937,0.60276338],
[0.54488318,0.4236548,0.64589411],
[0.43758721,0.891773,0.96366276],
[0.38344152,0.79172504,0.52889492]])
np.random.seed(0)
np.random.rand(4,3)
Out[364]:
array([[0.5488135,0.71518937,0.60276338],
[0.54488318,0.4236548,0.64589411],
[0.43758721,0.891773,0.96366276],
[0.38344152,0.79172504,0.52889492]])
看!是不是成功了呢脉执。
下面再給大家看個例子疼阔,以供大家更好地理解:
defrng():
foriinrange(5):
np.random.seed(123)
print(np.random.rand(4))
rng()
>>>[0.696469190.286139330.226851450.55131477]
[0.696469190.286139330.226851450.55131477]
[0.696469190.286139330.226851450.55131477]
[0.696469190.286139330.226851450.55131477]
[0.696469190.286139330.226851450.55131477]
defrng_n():
np.random.seed(123)
foriinrange(5):
print(np.random.rand(4))
rng_n()
>>>[0.696469190.286139330.226851450.55131477]
[0.719468970.423106460.98076420.68482974]
[0.48093190.392117520.343178020.72904971]
[0.438572240.05967790.398044260.73799541]
[0.182491730.175451760.531551370.53182759]
請仔細看這兩個自定義函數(shù)的不同,大家現(xiàn)在是不是對np.random.seed()有了更好的理解了呢适瓦?