在使用numpy時,難免會用到隨機數生成器。numpy.random.seed(),隨機數種子,每次可以生成相同的隨機數。
兩個問題:
1.利用隨機數種子,每次生成的隨機數相同,如何理解?
2.隨機數種子的參數怎麼選擇?經常看到np.random.seed(Argument),這個參數不一樣,有的是0,有的是1,當然還有其他數,那麼如何選擇參數呢?
以np.random.randn()函數爲例
import numpy as np
if __name__ == '__main__':
i = 0
while(i < 6):
if(i < 3):
# np.random.seed(0)
print(np.random.randn(1,5))
else:
np.random.seed(0)
print(np.random.randn(1,5))
pass
i += 1
print('\n--------------------------------------------------------------------------\n')
i = 0
while(i < 2):
print(np.random.randn(1,5))
i += 1
print('\n****************************************************************************\n')
print(np.random.randn(2,5))
print('\n############################################################################\n')
np.random.seed(0)
i = 0
while(i < 8):
print(np.random.randn(1,5))
i += 1
'''
輸出結果:
[[-1.76621289 -1.05873992 -0.66419152 -0.01032896 -1.45679443]]
[[ 0.72057899 -0.25160152 -0.69906354 -1.27840913 0.9767471 ]]
[[-0.39028757 0.40151722 -1.42781399 0.55213104 0.91395741]]
[[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
--------------------------------------------------------------------------
[[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
****************************************************************************
[[ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574]
[-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462]]
############################################################################
[[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574]]
[[-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462]]
[[-1.45436567 0.04575852 -0.18718385 1.53277921 1.46935877]]
[[ 0.15494743 0.37816252 -0.88778575 -1.98079647 -0.34791215]]
[[ 0.15634897 1.23029068 1.20237985 -0.38732682 -0.30230275]]
'''
'''
總結:
1.對技術種子隊後面的結果一直有影響。同時,加了隨機數種子以後,後面的隨機數組都是按一定順序生成的。
2.輸出結果中,print(np.random.randn(2,5))的輸出結果和最後一個while循環中兩個一行烏列的數組結果相同,
說明,在生成多行隨機數組時,是由單行隨機數組組合而成的。
現在我破門回答了第一個疑惑:利用隨機數種子,每次生成的隨機數相同,這是什麼意思?
--就是使後面的隨機數按照一定得順序生成。
'''
import numpy as np
if __name__ == '__main__':
i = 0
np.random.seed(0)
while(i < 3):
print(np.random.randn(1,5))
i += 1
i = 0
while(i < 2):
print(np.random.randn(1,5))
i += 1
print("\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n")
i = 0
np.random.seed(1) #如果改爲np.random.seed(0)的話,結果將於上面兩個while循環一樣。
while(i < 5):
print(np.random.randn(1,5))
i += 1
'''
輸出結果:
[[1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574]]
[[-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462]]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[[ 1.62434536 -0.61175641 -0.52817175 -1.07296862 0.86540763]]
[[-2.3015387 1.74481176 -0.7612069 0.3190391 -0.24937038]]
[[ 1.46210794 -2.06014071 -0.3224172 -0.38405435 1.13376944]]
[[-1.09989127 -0.17242821 -0.87785842 0.04221375 0.58281521]]
[[-1.10061918 1.14472371 0.90159072 0.50249434 0.90085595]]
'''
'''
總結:
1.np.random.seed(參數),該語句的位置指定了一個隨機數生成的起始位置。
每個參數對應一個位置,並且在該參數確定後,其後面的額隨機數的生成順序也就確定了。
所以,我們回答了第二個疑問:隨機數種子的參數怎麼選擇?
--我認爲隨意,這個參數只是確定一下隨機數的起始位置。
'''