np.random.seed() 理解

在使用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(參數),該語句的位置指定了一個隨機數生成的起始位置。
  每個參數對應一個位置,並且在該參數確定後,其後面的額隨機數的生成順序也就確定了。

所以,我們回答了第二個疑問:隨機數種子的參數怎麼選擇?
--我認爲隨意,這個參數只是確定一下隨機數的起始位置。
'''

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章