random.seed()函數理解


random模塊使用Mersenne Twister算法來計算生成隨機數。這是一個確定性算法,但是可以通過random.seed()函數修改初始化種子[1]。比如:

random.seed() # Seed based on system time or os.urandom()
random.seed(12345) # Seed based on integer given
random.seed(b'bytedata') # Seed based on byte data

對於random.seed(n),如果使用相同的n值,則隨機數生成函數每次生成的隨機數序列都相同;如果不設置這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數序列因時間差異而不同。

例1

import random
random.seed(9)
for i in range(3):
    print(random.random())

運行結果如下:

0.46300735781502145
0.37331193139504204
0.13853941251445523

本例中,每次循環時random.random()都采用9作為初始化的種子,生成相同的隨機數序列。在循環中,第一次調用random.random()將返回該隨機數序列的第一個元素,第二次調用random.random()將返回該隨機數序列的第二個元素,以此類推。

再次運行示例代碼的結果如下:

0.46300735781502145
0.37331193139504204
0.13853941251445523

多次運行這個示例代碼,所得結果都是一樣的,因為在本例中,使用的seed()值都是9,所以random.random()每次生成的隨機數序列都相同。

例2

import random
for i in range(3):
    random.seed(9)
    print(random.random())

運行上述程序的結果如下:

0.46300735781502145
0.46300735781502145
0.46300735781502145

在本例中,使用的seed()值都是9,所以random.random()每次生成的隨機數序列都相同,但是random.seed(9)在循環內部,print(random.random())這行命令每一次輸出時都定位到所生成的隨機數列表的第一個元素。

 

參考資料:

[1]. 3.11 隨機選擇

[2]. random.seed()的使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM