日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?NumPy隨機抽模塊介紹及方法_python

作者:飛Link ? 更新時間: 2022-10-31 編程語言

1. 隨機數

np.random.random()是最常用的隨機數生成函數,該函數生成的隨機數隨機均勻分布于[0, 1)區間。如果不提供參數,np.random.random()函數返回一個浮點型隨機數。np.random.random()函數還可以接受一個整型或元組參數,用于指定返回的浮點型隨機數數組的結構(shape)。也有很多人習慣使用np.random.rand()函數生成隨機數,其功能和np.random.random()函數一樣,知識np.random.rand()函數不接受元組參數,必須要寫成兩個整型參數

import numpy as np

print(np.random.random())
print(np.random.random(2))
print(np.random.random((2,3)))

np.random.randint()是另一個常用的隨機數生成函數,該函數生成的隨機整數均勻分布于[low, high)區間。如果省略low參數,則默認low的值等于0。np.random.randint()函數還有一個默認參數size,用于指定返回的整型隨機數數組的結構(shape)

print(np.random.randint(10))
print(np.random.randint(10, size=5))
print(np.random.randint(10, size=(2,5)))
print(np.random.randint(10, 100, size=(2,5)))

2. 隨機抽樣

隨機抽樣是從指定的有序列表中隨機抽取指定數量的元素。隨機抽樣的應用比較廣泛,如產品抽檢、抽簽順序等。NumPy的隨機抽樣函數是np.random.choice(),其原型如下

np.random.choice(a, size=None, replace=True, p=None)

參數a表示待抽樣的全體樣本,它值接受整數或一維的數組(列表)。參數a如果是整數,相當于將數組np.arange(a)作為全體樣本。參數size用于指定返回抽樣結果數組的結構(shape)。參數replace用于指定是否允許多次抽取同一個樣本,默認為允許。參數p是和全體樣本集合等長的權重數組,用于指定對應樣本被抽中的概率。

import numpy as np

print(np.random.choice(1,5)) # 抽簽樣本只有1個元素0,抽取5次
print(np.random.choice(['a','b','c'], size=(3,5), p=[0.5,0.25,0.25])) # 指定權重
print(np.random.choice(np.arange(100), size=(2,5), replace=False)) # 不允許重復

3. 正態分布

使用np.random.randn()函數是最簡單的生成標準正態分布隨機數的方法。np.random.randn()函數用于生成均值為0、標準差為1的正態分布(標準正態分布)的隨機數、該函數可以接受一個或兩個整型參數,用來指定返回的符合標準正態分布的隨機數數組的結構(shape)

import numpy as np

print(np.random.randn()) # 標準正態分布,均值為0,標準差為1
print(np.random.randn(5))
print(np.random.randn(2,5))

如果需要生成非標準正態分布隨機數,則應該使用np.random.normal()函數。np.random.nomal()函數默認生成均值為0、標準差為1的正態分布隨機數。參數loc用于指定均值,參數scale用于指定標準差,參數size用于指定返回的符合正態分布的隨機數數組的結構(shape)。從下面的代碼可以看出,和使用默認標準差相比,指定標準差為0.2時,數據分布更加靠近均值

print(np.random.normal()) # 默認均值為0,標準差為1
print(np.random.normal(loc=2, size=5)) # 參數loc指定均值為2
print(np.random.normal(loc=2, scale=0.2, size=(2,5))) # 參數loc指定均值為2,參數scale指定標準差為0.2

4. 偽隨機數的深度思考

計算機程序或編程語言中的隨機數都是偽隨機數。因為計算機硬件是確定的,代碼是固定的,算法是準確的,通過這些確定的、固定的、準確的東西不會產生真正的隨機數,除非引入這個封閉系統以外的因素。計算機系統的隨機算法一般使用線性同余或平方取中的算法,通過一個種子(通常用時鐘代替)產生。這意味著,如果知道了種子和已經產生的隨機數,就可能獲得接下來隨機數序列的信息,這就是偽隨機數的可預測性

NumPy隨機數函數內部使用了一個偽隨機數生成器,這個生成器每次實例化時都需要一個種子(整數)完成初始化。如果兩次初始化的種子相同,則每次初始化后產生的隨機數序列就完全一致。np.random.seed()函數可以指定偽隨機數生成器的初始化種子

import numpy as np

np.random.seed(12345) # 使用'12345'隨機種子初始化偽隨機數生成器
print(np.random.random(5))
print(np.random.random((2,3)))

np.random.seed(12345) # 再次使用'12345'隨機種子初始化偽隨機數生成器
print(np.random.random(5)) # 和上面完全一致
print(np.random.random((2,3))) # 和上面完全一致

從上述代碼匯總可以看出,只要指定相同的種子,接下來的隨機序列就完全一致。這意味著,只有從外部引入真正的隨機因子(如天空云朵的形狀、鄰居家無線網絡信號的強度等)作為種子,才可以得到真正的隨機數

此外,NumPy還提供了隨機數生成器,可以直接操作這個生成器來生成隨機數

r = np.random.RandomState(12345) # 使用隨機數生成器也同樣
print(r.random(5)) # 和上面完全一致
print(r.random((2,3))) # 和上面完全一致

原文鏈接:https://blog.csdn.net/feizuiku0116/article/details/126705920

欄目分類
最近更新