06.21 Python 模塊 Random

Python 模塊 Random

Python 的 random 模塊提供了不同類型的偽隨機數生成器,基於Mersenne Twister算法,此算法是Makoto Matsumoto (松本)和Takuji Nishimura (西村)於1997年開發的。

生成隨機數


random() 方法從生成的序列中隨機返回一個浮點數,範圍是 0 <= n < 1.0

Python 模塊 Random

輸出:

Python 模塊 Random

使用 for in 語法隨機生成了5個隨機數。隨機數範圍是 0 <= n < 1.0

使用 uniform() 函數可以生成指定範圍的浮點數:

Python 模塊 Random

輸出:

Python 模塊 Random

這個例子,使用 format() 函數格式化生成的浮點數,保留三位小數,寬度是4。

傳入最小值(minimum)和最大值(maximum),uniform() 函數生成返回的值使用的公式(formula): min + (max - min) * random()

Seeding


random() 函數在一個很大的區間生成隨機數,這樣可以確保返回的值不容易重複。但是有時候,有可能需要使用同樣的數據集進行計算,一種方法是首先生成一大批數據集保存起來,另一種方法使用 Python 提供的 seed() 函數,它會初始化一個默認的偽隨機數發生器,每次生成的值都一樣。

Python 模塊 Random

輸出:

Python 模塊 Random

seed() 函數確定第一個隨機數,因為生成隨機數的公式是根據第一個值來確定的,那麼確定了第一個值後,後續的隨機數都是一致的。

保存狀態


生成隨機數的算法內部會有個狀態,可以通過 getstate() 函數訪問這個狀態,如果你想根據一個初始值,持續的生成隨機數,可以把獲取到的狀態保存起來,下次程序運行的時候,可以通過函數 setstate() 設置到上次的進度,急速生成之後的隨機數。

Python 模塊 Random

狀態值是一個元組類型,可以通過 pickle 模塊的方法 dump() 序列化到一個文件中,下次程序運行的時候,可以直接調用 pickle.load() 方法加載。

生成整數 Integers


random() 方法返回的是一個浮點數,雖然可以再把結果轉換成整數,還可以直接調用便利的方法 randint() 直接生成整數。randint(a, b) 生成的值的範圍:a <= n <= b,相當於 randrange(a, b+1)

Python 模塊 Random

randrange() 方法可以在指定範圍內生成隨機數:

Python 模塊 Random

randrange(start, stop[, step]) 函數的前兩個參數是起始值、結束值(返回結果不包括結束值)。 第三個參數 step 代表步進值,類似 range() 函數。


分享到:


相關文章: