【Python 标准库学习】伪随机数生成库 — random
歡迎加入 Python 官方文檔翻譯團隊:https://www.transifex.com/python-doc/
隨機函數在很多科學計算中都會用到,比如生成一系列隨機數來計算平均值、高斯分布、伽馬分布、貝塔分布、對數正態分布等。
幾乎所有模塊函數都依賴于基本函數 random() ,它在半開放區間 [0.0,1.0) 內均勻生成隨機浮點數。 Python 使用 Mersenne Twister 作為核心生成器。 它產生 53 位精度浮點數,周期為 219937-1 ,其在 C 中的底層實現既快又線程安全。 Mersenne Twister 是現存最廣泛測試的隨機數發生器之一。 但是,因為完全確定性,它不適用于所有目的,并且完全不適合加密目的。
random 模塊官方文檔:https://docs.python.org/3/library/random.html
random 模塊部分常用函數:
| random() | 返回一個在 [0.0, 1.0) 范圍內的隨機浮點數 |
| uniform(a, b) | 在指定范圍 [a, b] 內返回一個隨機浮點數 |
| randint(a, b) | 在指定范圍 [a, b] 內返回一個隨機整數 |
| choice(seq) | 從非空序列 seq 中返回一個隨機元素 |
| sample(population, k) | 返回在多個字符中(population)生成指定數量(k)的隨機字符 |
| randrange(start, stop[, step]) | 在指定范圍(start, stop) 內返回一個間隔為 step 的隨機整數,step 為可選參數 |
| shuffle(x) | 將序列 x 隨機打亂位置 |
| triangular(low, high, mode) | 返回三角形分布的隨機數,low、high 為返回值的上下限,mode 為中值 |
| betavariate(alpha, beta) | 求 Beta 分布的隨機數,其中 alpha > 0、beta > 0,返回值的范圍介于 0 和 1 之間 |
| expovariate(lambd) | 指數分布,lambd 是 1.0 除以所需的平均值,它應該是非零的 如果 lambd 為正,則返回值的范圍為 0 到正無窮大 如果 lambd 為負,則返回值的范圍為負無窮大到 0 |
| gammavariate(alpha, beta) | Gamma 分布,參數的條件是 alpha > 0 和 beta > 0 |
| gauss(mu, sigma) | 高斯分布,mu 是平均值,sigma 是標準差 |
| lognormvariate(mu, sigma) | 對數正態分布,mu 是平均值,sigma 是標準差,mu 可以是任何值,sigma 必須大于零 |
| normalvariate(mu, sigma) | 正態分布,mu 是平均值,sigma 是標準差 |
| vonmisesvariate(mu, kappa) | 馮·米塞斯分布(von Mises),mu 是平均角度,以弧度表示,介于 0 和 2 * pi 之間 kappa 是濃度參數,必須大于或等于零 如果 kappa 等于零,則該分布在 0 到 2 * pi 的范圍內減小到均勻的隨機角度 |
| paretovariate(alpha) | 帕累托分布,alpha 是形狀參數 |
| weibullvariate(alpha, beta) | 威布爾分布,alpha 是比例參數,beta 是形狀參數 |
常見函數應用舉例:
random.random()
生成一個在 0.0 <= x < 1.0 之間的浮點數
>>> import random # 導入 random 模塊 >>> random.random() # 調用 random() 方法 0.7811493181713127 # 隨機生成一個大于等于 0,小于 1 的浮點數random.uniform(a, b)
在指定范圍 [a, b] 內獲取隨機浮點數
>>> import random >>> random.uniform(-5, 5) -4.117969777026395 >>> random.uniform(-10, -5) -8.257739458506384 >>> random.uniform(1.8, 9.2) 8.129467781976114random.randint(a, b)
在指定范圍 [a, b] 內獲取隨機整數
>>> import random >>> random.randint(1, 20) 8random.choice(seq)
從非空序列 seq 中返回一個隨機元素
>>> import random >>> random.choice('tomorrow') 'o' >>> random.choice(['python', 'c++', 'java']) 'java'random.sample(population, k)
返回在多個字符中(population)生成指定數量(k)的隨機字符
>>> import random >>> random.sample('dsabkl2498sjdsa8asd7f0',5) ['f', '2', 'a', 's', 's']random.randrange(start, stop[, step])
在指定范圍內 (start, stop) 返回一個間隔為 step 的隨機整數,step 為可選參數
>>> import random >>> print(random.randrange(0, 10, 5)) 5 >>> print(random.randrange(0, 11, 5)) 10 >>> print(random.randrange(0, 10)) 7random.shuffle(x)
將序列 x 隨機打亂位置
>>> a = [1, 2, 3, 4, 5] >>> random.shuffle(a) >>> a [2, 5, 4, 1, 3]random.triangular(low, high, mode)
返回三角形分布的隨機數,返回的隨機浮點數 N 滿足 low <= N <= high,并且在這些邊界之間指定 mode,low 和 high 默認值為 0 和 1,mode 參數默認為邊界之間的中點,持續使用該函數,可以得到以 mode 為對稱點的隨機分布數據集(在圖上體現為一個三角形分布)
>>> import random >>> random.triangular() 0.3604089623206311 >>> random.triangular(0,10) 7.215758147092778 >>> random.triangular(0,10,15) 10.965963151355984random.betavariate(alpha, beta)
求 Beta 分布,參數條件:alpha > 0,beta > 0,返回值介于 0 ~ 1 之間
>>> import random >>> random.betavariate(4, 9) 0.13445358577865857總結
以上是生活随笔為你收集整理的【Python 标准库学习】伪随机数生成库 — random的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.23万亿美元!苹果公司市值重回全球第
- 下一篇: VAIO笔记本又回来了!10核心15W