首頁 > 軟體

Python中random函數的用法整理大全

2022-08-30 14:02:53

首先我們需要匯入random模組 

1. random.random(): 返回隨機生成的一個浮點數,範圍在[0,1)之間

import random
print(random.random())

2. random.uniform(a, b): 返回隨機生成的一個浮點數,範圍在[a, b)之間

import random
print(random.uniform(1,5))

3. random.randint(a,b)生成指定範圍內的整數 

import random
print(random.randint(1,10))

4. random.randrange([start],stop[,step]):用於從指定範圍內按指定基數遞增的集合中獲取一個亂數。 

例如random.randrange(10,100,2),結果相當於從 [10,12,14,16...96,98] 序列中獲取一個亂數。random.randrange (10,100,2) 的結果上與 random.choice(range(10,100,2)) 等效。

import random
print(random.randrange(10,22,3))

5. random.choice():從指定的序列中獲取一個隨機元素

random.choice()從序列中獲取一個隨機元素,其原型為random.choice(sequence),引數sequence表示一個有序型別。這裡說明一下,sequence在Python中不是一種特定的型別,而是泛指序列資料結構列表,元組,字串都屬於sequence

import random
print(random.choice('學習python'))   # 從字串中隨機取一個字元
print(random.choice(['good', 'hello', 'is', 'hi', 'boy']))   # 從list列表中隨機取
print(random.choice(('str', 'tuple', 'list')))   # 從tuple元組中隨機取

6. random.shuffle(x[,random]):用於將一個列表中的元素打亂,隨機排序

import random
p=['hehe','xixi','heihei','haha','zhizhi','lala','momo..da']
random.shuffle(p)
print(p)
x = [1, 2, 3, 4, 5]
random.shuffle(x)
print(x)

7. random.sample(sequence,k):用於從指定序列中隨機獲取指定長度的片段,sample()函數不會修改原有序列。

import random
list1=[1,2,3,4,5,6,7,8,9,10]
slice=random.sample(list1,5)
print(slice)
#[8, 3, 5, 9, 10]
print(list1)
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
x = random.sample(range(0, 10), 5)
print(x, type(x))
#[9, 2, 7, 8, 6] <class 'list'>
Words = "AppleKMedoide"
print(random.sample(Words, 3))
#['p', 'M', 'A']
print(random.sample(Words, 3))
#['d', 'i', 'l']

下面的函數需要呼叫numpy庫 

8. np.random.rand(d0, d1, …, dn): 返回一個或一組浮點數,範圍在[0, 1)之間

import random
import numpy as np
x = np.random.rand()
y = np.random.rand(4)
print(x,type(x))
#0.09842641570445387 <class 'float'>
print(y,type(y))
#[0.27298291 0.12350038 0.63977128 0.90791234] <class 'numpy.ndarray'>

9. np.random.normal(loc=a, scale=b, size=()): 返回滿足條件為均值=a, 標準差=b的正態分佈(高斯分佈)的概率密度亂數

np.random.normal(loc=a, scale=b, size=()) - 返回滿足條件為均值=a, 標準差=b的正態分佈(高斯分佈)的概率密度亂數,size預設為None(返回1個亂數),也可以為int或陣列

import random
import numpy as np
x = np.random.normal(10,0.2,2)
print(x,type(x))
#[9.78391585 9.83981096] <class 'numpy.ndarray'>
y = np.random.normal(10,0.2)
print(y,type(y))
#9.871187751372984 <class 'float'>
z = np.random.normal(0,0.1,(2,3))
print(z,type(z))
#[[-0.07114831 -0.10258022 -0.12686863]
# [-0.08988384 -0.00647591  0.06990716]] <class 'numpy.ndarray'>
z = np.random.normal(0,0.1,[2,2])
print(z,type(z))
#[[ 0.07178268 -0.00226728]
# [ 0.06585013 -0.04385656]] <class 'numpy.ndarray'>

10 np.random.randn(d0, d1, … dn): 返回標準正態分佈(均值=0,標準差=1)的概率密度亂數

np.random.randn(d0, d1, ... dn): 返回標準正態分佈(均值=0,標準差=1)的概率密度亂數,

import random
import numpy as np
x = np.random.randn()
y = np.random.randn(3)
z = np.random.randn(3, 3)
print(x, type(x))
print(y, type(y))
print(z, type(z))

11. np.random.standard_normal(size=()): 返回標準正態分佈(均值=0,標準差=1)的概率密度亂數

np.random.standard_normal(): 返回標準正態分佈(均值=0,標準差=1)的概率密度亂數, size預設為None(返回1個亂數),也可以為int或陣列

import random
import numpy as np
x = np.random.standard_normal()
y = np.random.standard_normal(size=(3,3))
print(x, type(x))
print(y, type(y))

np.random.rand()與np.random.standard_normal()的方法結果相似,都是返回合符標準正態分佈的隨機浮點數或陣列。

12. np.random.randint(a, b, size=(), dtype=int): 返回在範圍在[a, b)中的隨機整數(含有重複值)

np.random.randint(a, b, sizie=(), dytpe=int) - size預設為None(返回1個亂數),也可以為int或陣列

import random
import numpy as np
# 從序列[0, 10)之間返回shape=(5,5)的10個隨機整數(包含重複值)
x = np.random.randint(0, 10, size=(5, 5))
# 從序列[15, 20)之間返回1個隨機整數(size預設為None, 則返回1個隨機整數)
y = np.random.randint(15, 20)
print(x, type(x))
print(y, type(y))

13. random.seed(): 設定隨機種子

在設定隨機種子為10之後,random.random()的亂數將被直接設定為:0.5714025946899135

import random
random.seed(10)
x = random.random()
print(x,type(x))
random.seed(10)
y = random.random()
print(y,type(y))
z = random.random()
print(z,type(z))

random亂數是這樣生成的:我們將這套複雜的演演算法(是叫亂數生成器吧)看成一個黑盒,把我們準備好的種子扔進去,它會返給你兩個東西,一個是你想要的亂數,另一個是保證能生成下一個亂數的新的種子,把新的種子放進黑盒,又得到一個新的亂數和一個新的種子,從此在生成亂數的路上越走越遠。

我們利用如下程式碼進行測試:

import numpy as np
if __name__ == '__main__':
    i = 0
    while i < 6:
        if i < 3:
            np.random.seed(0)
            print(np.random.randn(1, 5))
        else:
            print(np.random.randn(1, 5))
        i += 1
    i = 0
    while i < 2:
        print(np.random.randn(1, 5))
        i += 1
    print(np.random.randn(2, 5))
    np.random.seed(0)
    print("###################################")
    i = 0
    while i < 8:
        print(np.random.randn(1,5))
        i += 1

通過該實驗我們可以得到以下結論:

  • 兩次利用亂數種子後,即便是跳出迴圈後,生成亂數的結果依然是相同的。第一次跳出while迴圈後,進入第二個while迴圈,得到的兩個亂陣列確實和加了亂數種子不一樣。但是,後面的加了亂數種子的,八次迴圈中的結果和前面的結果是一樣的。說明,亂數種子對後面的結果一直有影響。同時,加了亂數種子以後,後面的亂陣列都是按一定的順序生成的。
  • 在同樣的隨機種子後第六次的亂數生成結果,兩行五列的陣列和兩個一行五列的陣列結果相同。說明,在生成多行亂陣列時,是由單行亂陣列組合而成的。
  • 利用亂數種子,每次生成的亂數相同,就是使後面的亂數按一定的順序生成。當亂數種子引數為0和1時,生成的亂數和我上面高亮的結果相同。說明該引數指定了一個亂數生成的起始位置。每個引數對應一個位置。並且在該引數確定後,其後面的亂數的生成順序也就確定了。
  • 亂數種子的引數怎麼選擇?我認為隨意,這個引數只是確定一下亂數的起始位置。

本文綜合參考瞭如下文章整理: 

總結

到此這篇關於Python中random函數用法的文章就介紹到這了,更多相關Python random函數用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com