首頁 > 軟體

Python numpy中np.random.seed()的詳細用法範例

2022-08-19 14:01:32

引言

在進行機器學習和深度學習中,我們會經常用到np.random.seed(),利用亂數種子,使得每次生成的亂數相同。

numpy.randn.randn(d0,d1,...,dn)

  • randn函數根據給定維度生成大概率在(-2.58~+2.58)之間的資料
  • randn函數返回一個或者一組樣本,具有標準正態分佈
  • dn表示每個維度
  • 返回值為指定維度的array
import numpy as np

a = np.random.randn(2,4)  #4*2矩陣
print(a)

b = np.random.randn(4,3,2)  #shape:4*3*2
print(b)

我們將帶著兩個問題進行np.random.seed()的學習:

  1.np.random.seed()是否一直有效?

  2.np.random.seed(Argument)的引數作用?

E.G.實驗

# -*- coding: utf-8 -*- 
# @Time : 2019/10/26 20:57 
# @Author : BaoBao
# @Mail : baobaotql@163.com 
# @File : random.seed.py 
# @Software: PyCharm

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:
            print(np.random.randn(1, 5))
            pass
        i += 1

    print("-------------------")
    i = 0
    while (i < 2):
        print(np.random.randn(1, 5))
        i += 1
    print(np.random.randn(2, 5))

    print("---------reset----------")
    np.random.seed(0)
    i = 0
    while (i < 8):
        print(np.random.randn(1, 5))
        i += 1

執行截圖:

可以看出,np.random.seed()對後面的亂數一直有效。

兩次利用random.seed()後,即使跳出迴圈以後,生成亂數的結果依然相同。第一次跳出while迴圈後,進入第二次while迴圈,

得到的兩個亂陣列確實和加了亂數種子不一樣。但是後面的加入亂數種子的,八次迴圈中的結果和前面的結果是一樣的。說明,

亂數種子對後面的結果一直有影響。同時,加入亂數種子以後,後面的陣列都是按一定的順序生成的。

E.G.亂數種子引數的作用

# -*- coding: utf-8 -*- 
# @Time : 2019/10/26 20:57 
# @Author : BaoBao
# @Mail : baobaotql@163.com 
# @File : random.seed.py 
# @Software: PyCharm
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
    print("---------------------")
    np.random.seed(1)
    i = 0
    while (i < 3):
        print(np.random.randn(1, 5))
        i += 1

執行截圖:

當亂數種子引數為0和1時,生成的亂數結果相同。說明該引數指定了一個亂數生成的起始位置。每個引數對應一個位置。

並且在該引數確定後,其後面的亂數的生成順序也就確定了。所以,亂數種子的引數怎麼選擇?這個引數只是確定一下亂數的起始位置,可隨意分配.

補充:一個隨機種子在程式碼中只作用一次,只作用於其定義位置的下一次亂數生成 

import numpy as np
num=0
print(np.random.random())#沒有設定隨機種子 那麼這裡是根據系統時間為引數生成的亂數
np.random.seed(5)
while(num<5):
    print(np.random.random())
    num+=1

 

總結

到此這篇關於Python numpy中np.random.seed()詳細用法的文章就介紹到這了,更多相關numpy.random.seed()的用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com