Python – numpy.random.seed() 心得分享

最近在工作上需要用到隨機挑選的功能,很自然就想到numpy裡的random模組。又因為需要每次的隨機可以重現(拿來做驗算、作圖、比較),所以必須到用seed的方法。

懶得看官方文件,所以直接google「numpy random seed」,卻發現比較少繁體台灣的文章,而且排在前面的文章也寫的容易讓人造成誤會(至少我是誤會了)。稍微研究一下模組後,寫個繁中版,給自己參考也分享給大家。

seed的用法就是給定一個值去決定之後亂數的產生。通常會用在我們希望整個亂數產生的過程是隨機的,但在後續的研究與分析時則希望用到同一筆隨機產生的亂數。也就是說,若你事先看過根據某個seed的值所產生的隨機序列,那其實對你來說就「一點也不隨機了」。

以下舉一個簡單的python code,隨機產生一個「之後可以掌握的隨機數列」:

>>> import numpy as np
>>> np.random.seed(88)
>>> np.random.rand(10)
array([0.64755105, 0.50714969, 0.52834138, 0.8962852 , 0.69999119,
       0.7142971 , 0.71733838, 0.22281946, 0.17515452, 0.45684149])
>>> np.random.seed(88)
>>> np.random.rand(10)
array([0.64755105, 0.50714969, 0.52834138, 0.8962852 , 0.69999119,
       0.7142971 , 0.71733838, 0.22281946, 0.17515452, 0.45684149])

我們讓random.rand以「88」為基準去產生10個隨機變數的值,並再一次的給定「88」讓random.rand產生10個隨機數列的值,你會發現產生的數列值很隨機地介在0~1之間,但兩次隨機產生的數值卻是一模一樣的。

這樣的特性讓我們可以重覆產生相同的隨機數列,並對結果進行討論與修正。覺得怪的話,也可以把seed數值想成是某個案例吧(Case第88號之類的)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *