1. 程式人生 > >random——偽隨機數生成模塊

random——偽隨機數生成模塊

fcc 核心 區間 art shuffle 執行 得到 之間 你在

random——偽隨機數生成模塊

轉自:https://blog.csdn.net/zhtysw/article/details/79978197

該模塊包含構造偽隨機數生成器的多個方法。對於整數,偽隨機數有統一的選擇範圍;對於序列,選擇的隨機元素有統一標準,一個是在當前列表中進行隨機排序,另一個是從種子樣本中隨機生成一個序列。

實際應用中,該模塊有專用函數生成符合均勻分布、正態分布、對數分布、負指數分布、伽馬分布、貝塔分布的函數。對於生成角,只支持馮·米塞斯分布。幾乎所有的模塊函數都依賴於基本函數random(),該函數在半開放範圍[0.0,1.0)內均勻地生成隨機浮點數。Python使用Mersenne Twister作為核心生成器。它生成53位精度浮點數,周期為2 ** 19937-1。

1. 簿記函數

random. seed(a=None, version=2)

初始化隨機數生成器。如果a被省略或被賦值為None,則使用當前系統時間為隨機源;如果當前操作系統提供隨機數源,其優先級高於系統時間。如果a是一個整數,那麽直接使用它。

random.getstate()

捕獲當前隨機數生成器的內部狀態,並將其返回。

random.setstate(state)

state應當為在調用該函數之前調用getstate()函數時獲取的生成器狀態值,並且在執行setatate()後,生成器將會回到以前那個狀態。

random. getrandbits(k)

返回一個k位的整數,該整數每位都由隨機數構成。

2. 針對整數的隨機函數

random. randrange(stop)

random. randrange(start, stop[, step])

該函數等價於choice(range(start, stop, step))或choice(range(stop))意味著給出的隨機值屬於後面參數定義的值的範圍內。

random.randint(a, b)

返回一個隨機整數,這個整數大於等於a小於等於b。

3. 針對序列的隨機函數

random.choice(seq)

從非空序列seq中隨機返回一個元素。

random. choice(population, weights=None, *, cum_weights=None, k=1)

從population中隨機選擇k個可修改的元素組成一個新的列表,並將其返回。population不能為空。如果weights(權重序列)被給出,選擇將會根據相應的權重規劃而進行。如果cum_weights被給出,選擇將會依據累計權重的方式進行。(類似於:權重序列為[1,2,3,4],累計下來的結果是[1,3,6,10])。

random. shuffle(x[, random])

將序列x隨機混合。可選參數random為0參數函數,它會隨機返回[0.0, 1.0)內的一個浮點數。

random.sample(population, k)

從population這個序列或集合中隨機選擇非重復的k個元素組成一個新的列表,該函數用於非替換的隨機取樣樣本。

4. 實數域內概率分布模型所對應函數

該模塊內的隨機函數,其輸出的隨機值符合其函數名所示的概率分布模型。

random.random()

從[0.0, 1.0)中隨機返回一個浮點數。

random.uniform(a, b)

從a與b確定的範圍中隨機返回一個浮點數。

random.triangular(low, high, mode)

返回一個隨機浮點數N,low<=N<=high,並且mode一定在這個範圍內。mode被定義為該區間的重點,給出以它為中點的對稱分布。

random.betavariate(alpha, beta)

Beta(β)分布,兩個參數必須都大於零,返回值在0與1之間。

random.expovariate(lambd)

指數分布,lambd為1.0處於該分布被期望的均值。

random. gammavariate(alpha, beta)

Gamma(伽馬γ)分布,參數必須大於零。分布函數等價於:

x ** (alpha -1) * math.exp(-x / beta)

pdf(x) = --------------------------------------

math.gamma(alpha) * beta ** alpha

random.gauss(mu, sigma)

高斯(正態)分布,mu是均值,sigma是標準差。

random. lognormvariate(mu, sigma)

對數正態分布。如果你在這個分布中采取自然對數,你會得到一個均值為mu,標準差為sigma的正態分布。

random. normalvariate(mu, sigma)

正態分布,比gauss(mu, signa)實現的慢。

random.vonmisesvariate(mu, kappa)

馮米塞斯分布。mu是角的平均弧度,範圍[0, 2*pi];kappa是密度參數,它必須大於等於0。當kappa等於0時,該分布退化為[0, 2*pi]上的標準隨機分布。

random. paretovariate(alpha)

帕累托分布,alpha是形狀參數。

random. weibullvariate(alpha, beta)

威布爾分布,alpha為規模參數,beta是形狀參數。

5. 替代產生器

class random. System([seed])

使用os.urandom()函數從操作系統提供的源生成隨機數的類。不適用於所有系統。不依賴於軟件狀態,並且序列不可重現。因此,seed()方法不起作用並被忽略。如果調用getstate()和setstate()方法會引發NotImplementedError。

6. 重復性說明

有時候能夠重現偽隨機數生成器產生的序列是十分有用的。通過重復使用隨機數種子值,只要多個線程沒有運行,相同的序列應該在一次又一次的運行中再現。

在Python的版本中,大多數的隨機模塊實現的算法和種子函數都發生了一定的改變,但有兩方面與其他程序中的隨機模塊沒有差別:

①如果一個新的種子模塊被添加,那麽將配置一個向後兼容的播種機;

②如果給出相同的種子,生成器的random()模塊會生成同樣的序列。

random——偽隨機數生成模塊