<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
numpy.random 模組對 Python 內建的 random 進行了補充,增加了一些用於高效生成多種概率分佈的樣本值的函數,如正態分佈、泊松分佈等。
numpy.random.seed(seed=None)
seed()用於指定亂數生成時所用演演算法開始的整數值,如果使用相同的seed()值,則每次生成的亂數都相同,如果不設定這個值,則系統根據時間來自己選擇這個值,此時每次生成的亂數因時間差異而不同。
在對資料進行預處理時,經常加入新的操作或改變處理策略,此時如果伴隨著隨機操作,最好還是指定唯一的隨機種子,避免由於隨機的差異對結果產生影響。
二項分佈可以用於只有一次實驗只有兩種結果,各結果對應的概率相等的多次實驗的概率問題。比如處理猜10次拳贏6次的概率等類似的問題。
二項分佈概率函數的程式碼錶示:binom.pmf(k) = choose(n, k) pk (1-p)(n-k)
二項分佈概率函數的數學表示:
numpy.random.binomial(n, p, size=None)
表示對一個二項分佈進行取樣,size表示取樣的次數,n表示做了n重伯努利試驗,p表示成功的概率,函數的返回值表示n中成功的次數
【例】野外正在進行9(n=9)口石油勘探井的發掘工作,每一口井能夠開發出油的概率是0.1(p=0.1)。請問,最終所有的勘探井都勘探失敗的概率?
import numpy as np import matplotlib.pyplot as plt from scipy import stats np.random.seed(20200605) n = 9# 做某件事情的次數 p = 0.1# 做某件事情成功的概率 size = 50000 x = np.random.binomial(n, p, size) '''或者使用binom.rvs #使用binom.rvs(n, p, size=1)函數模擬一個二項隨機變數,視覺化地表現概率 y = stats.binom.rvs(n, p, size=size)#返回一個numpy.ndarray ''' print(np.sum(x == 0) / size) # 0.3897 plt.hist(x) plt.xlabel('隨機變數:成功次數') plt.ylabel('樣本中出現的次數') plt.show() #它返回一個列表,列表中每個元素表示隨機變數中對應值的概率 s = stats.binom.pmf(range(10), n, p) print(np.around(s, 3)) # [0.387 0.387 0.172 0.045 0.007 0.001 0. 0. 0. 0. ]
【例】模擬投硬幣,投2次,請問兩次都為正面的概率?
import numpy as np from scipy import stats import matplotlib.pyplot as plt np.random.seed(20200605) n = 2# 做某件事情的次數,這裡是投兩次硬幣 p = 0.5#做某件事情成功的概率,在這裡即投硬幣為正面的概率 size = 50000 x = np.random.binomial(n, p, size) '''或者使用binom.rvs #使用binom.rvs(n, p, size=1)函數模擬一個二項隨機變數,視覺化地表現概率 y = stats.binom.rvs(n, p, size=size)#返回一個numpy.ndarray ''' print(np.sum(x == 0) / size) # 0.25154 print(np.sum(x == 1) / size) # 0.49874 print(np.sum(x == 2) / size) # 0.24972 plt.hist(x, density=True) plt.xlabel('隨機變數:硬幣為正面次數') plt.ylabel('50000個樣本中出現的次數') plt.show() #它返回一個列表,列表中每個元素表示隨機變數中對應值的概率 s = stats.binom.pmf(range(n + 1), n, p) print(np.around(s, 3)) # [0.25 0.5 0.25]
期望:E(x) = np
方差:Var(x) = np(1-p)
利用stats.binom.stats(n, p, loc=0, moments='mv')計算期望和方差
moments引數中:m為期望,v為方差
泊松分佈
泊松分佈主要用於估計某個時間段某事件發生的概率。
泊松概率函數的程式碼錶示:poisson.pmf(k) = exp(-lam) lam*k / k!
泊松概率函數的數學表示:
numpy.random.poisson(lam=1.0, size=None)
表示對一個泊松分佈進行取樣,size表示取樣的次數,lam表示一個單位內發生事件的平均值,函數的返回值表示一個單位內事件發生的次數。
【例】假定某航空公司預定票處平均每小時接到42次訂票電話,那麼10分鐘內恰好接到6次電話的概率是多少?
import numpy as np from scipy import stats import matplotlib.pyplot as plt np.random.seed(20200605) lam = 42 / 6# 平均值:平均每十分鐘接到42/6次訂票電話 size = 50000 x = np.random.poisson(lam, size) '''或者 #模擬服從泊松分佈的50000個隨機變數 x = stats.poisson.rvs(lam,size=size) ''' print(np.sum(x == 6) / size) # 0.14988 plt.hist(x) plt.xlabel('隨機變數:每十分鐘接到訂票電話的次數') plt.ylabel('50000個樣本中出現的次數') plt.show() #用poisson.pmf(k, mu)求對應分佈的概率:概率質量函數 (PMF) x = stats.poisson.pmf(6, lam) print(x) # 0.14900277967433773
超幾何分佈
在超幾何分佈中,各次實驗不是獨立的,各次實驗成功的概率也不等。 超幾何分佈概率函數的數學表示:
numpy.random.hypergeometric(ngood, nbad, nsample, size=None)表示對一個超幾何分佈進行取樣,size表示取樣的次數,ngood表示總體中具有成功標誌的元素個數,nbad表示總體中不具有成功標誌的元素個數,ngood+nbad表示總體樣本容量,nsample表示抽取元素的次數(小於或等於總體樣本容量),函數的返回值表示抽取nsample個元素中具有成功標識的元素個數。
【例】一共20只動物裡有7只是狗,抽取12只有3只狗的概率(無放回抽樣)。
import numpy as np from scipy import stats import matplotlib.pyplot as plt np.random.seed(20200605) size = 500000 x = np.random.hypergeometric(ngood=7, nbad=13, nsample=12, size=size) '''或者 #用rvs(M, n, N, loc=0, size=1, random_state=None)模擬 x = stats.hypergeom.rvs(M=20,n=7,N=12,size=size) ''' print(np.sum(x == 3) / size) # 0.198664 plt.hist(x, bins=8) plt.xlabel('狗的數量') plt.ylabel('50000個樣本中出現的次數') plt.title('超幾何分佈',fontsize=20) plt.show() """ M 為總體容量 n 為總體中具有成功標誌的元素的個數 N,k 表示抽取N個元素有k個是成功元素 """ x = range(8) #用hypergeom.pmf(k, M, n, N, loc)來計算k次成功的概率 s = stats.hypergeom.pmf(k=x, M=20, n=7, N=12) print(np.round(s, 3)) # [0. 0.004 0.048 0.199 0.358 0.286 0.095 0.01 ]
超幾何分佈的均值與方差
均值E(x) = N(n/M)
方差Var(x) = N(n/M)(1-n/M)((M-N)/(M-1))
註釋:考慮n次實驗的超幾何分佈,令p=n/M,當總體容量足夠大時((M-N)/(M-1))近似於1,此時數學期望為Np,方差為Np(1-p).
#用stats(M, n, N, loc=0, moments='mv')計算均值和方差
stats.hypergeom.stats(20,7,12,moments='mv')
均勻分佈
【例】在low到high範圍內,建立大小為size的均勻分佈的亂數。
import numpy as np import matplotlib.pyplot as plt from scipy import stats np.random.seed(20200614) a = 0 b = 100 size = 50000 x = np.random.uniform(a, b, size=size) print(np.all(x >= 0)) # True print(np.all(x < 100)) # True y = (np.sum(x < 50) - np.sum(x < 10)) / size print(y) # 0.40144 plt.hist(x, bins=20) plt.show() a = stats.uniform.cdf(10, 0, 100) b = stats.uniform.cdf(50, 0, 100) print(b - a) # 0.4
作為uniform()的特列,可以得到[0,1)之間的均勻分佈的亂數。
【例】根據指定大小產生[0,1)之間均勻分佈的亂數。
import numpy as np np.random.seed(20200614) print(np.random.rand()) # 0.7594819171852776 print(np.random.rand(5)) # [0.75165827 0.16552651 0.0538581 0.46671446 0.89076925] print(np.random.rand(4, 3)) # [[0.10073292 0.14624784 0.40273923] # [0.21844459 0.22226682 0.37246217] # [0.50334257 0.01714939 0.47780388] # [0.08755349 0.86500477 0.70566398]] np.random.seed(20200614) print(np.random.uniform()) # 0.7594819171852776 print(np.random.uniform(size=5)) # [0.75165827 0.16552651 0.0538581 0.46671446 0.89076925] print(np.random.uniform(size=(4, 3))) # [[0.10073292 0.14624784 0.40273923] # [0.21844459 0.22226682 0.37246217] # [0.50334257 0.01714939 0.47780388] # [0.08755349 0.86500477 0.70566398]]
作為uniform的另一特例,可以得到[low,high)之間均勻分佈的隨機整數。
【例】若high不為None時,取[low,high)之間隨機整數,否則取值[0,low)之間隨機整數。
import numpy as np np.random.seed(20200614) x = np.random.randint(2, size=10) print(x) # [0 0 0 1 0 1 0 0 0 0] x = np.random.randint(1, size=10) print(x) # [0 0 0 0 0 0 0 0 0 0] x = np.random.randint(5, size=(2, 4)) print(x) # [[3 3 0 1] # [1 1 0 1]] x = np.random.randint(1, 10, [3, 4]) print(x) # [[2 1 7 7] # [7 2 4 6] # [8 7 2 8]]
標準的正太分佈數學表示:
【例】根據指定大小產生滿足標準正態分佈的陣列(均值為0,標準差為1)。
import numpy as np import matplotlib.pyplot as plt from scipy import stats np.random.seed(20200614) size = 50000 x = np.random.randn(size) y1 = (np.sum(x < 1) - np.sum(x < -1)) / size y2 = (np.sum(x < 2) - np.sum(x < -2)) / size y3 = (np.sum(x < 3) - np.sum(x < -3)) / size print(y1) # 0.68596 print(y2) # 0.95456 print(y3) # 0.99744 plt.hist(x, bins=20) plt.show() y1 = stats.norm.cdf(1) - stats.norm.cdf(-1) y2 = stats.norm.cdf(2) - stats.norm.cdf(-2) y3 = stats.norm.cdf(3) - stats.norm.cdf(-3) print(y1) # 0.6826894921370859 print(y2) # 0.9544997361036416 print(y3) # 0.9973002039367398
還可以指定分佈以及所需引數來進行隨機,例如高斯分佈中的mu和sigma。
import numpy as np import matplotlib.pyplot as plt np.random.seed(20200614) x = 0.5 * np.random.randn(2, 4) + 5 '''或者 #模擬10000個隨機變數 x = 0.5*stats.norm.rvs(size=(2,4))+5 ''' print(x) # [[5.39654234 5.4088702 5.49104652 4.95817289] # [4.31977933 4.76502391 4.70720327 4.36239023]] np.random.seed(20200614) mu = 5#平均值 sigma = 0.5#標準差 x = np.random.normal(mu, sigma, (2, 4)) print(x) # [[5.39654234 5.4088702 5.49104652 4.95817289] # [4.31977933 4.76502391 4.70720327 4.36239023]] size = 50000 x = np.random.normal(mu, sigma, size) print(np.mean(x)) # 4.996403463175092 print(np.std(x, ddof=1)) # 0.4986846716715106(#樣本標準差) ''' ddof:int, optional Means Delta Degrees of Freedom. The divisor used in calculations is N - ddof, where N represents the number of elements. By default ddof is zero. ''' plt.hist(x, bins=20) plt.show()
指數分佈描述時間發生的時間長度間隔。
指數分佈的數學表示:
【例】scale = 1/lambda
import numpy as np import matplotlib.pyplot as plt from scipy import stats np.random.seed(20200614) lam = 7 size = 50000 x = np.random.exponential(1 / lam, size) '''或者 #rvs(loc=0, scale=1/lam, size=size, random_state=None)模擬 ''' y1 = (np.sum(x < 1 / 7)) / size y2 = (np.sum(x < 2 / 7)) / size y3 = (np.sum(x < 3 / 7)) / size print(y1) # 0.63218 print(y2) # 0.86518 print(y3) # 0.95056 plt.hist(x, bins=20) plt.show() y1 = stats.expon.cdf(1 / 7, scale=1 / lam) y2 = stats.expon.cdf(2 / 7, scale=1 / lam) y3 = stats.expon.cdf(3 / 7, scale=1 / lam) print(y1) # 0.6321205588285577 print(y2) # 0.8646647167633873 print(y3) # 0.950212931632136
隨機從序列中獲取元素
import numpy as np np.random.seed(20200614) x = np.random.choice(10, 3) print(x) # [2 0 1] x = np.random.choice(10, 3, p=[0.05, 0, 0.05, 0.9, 0, 0, 0, 0, 0, 0]) print(x) # [3 2 3] x = np.random.choice(10, 3, replace=False, p=[0.05, 0, 0.05, 0.9, 0, 0, 0, 0, 0, 0]) print(x) # [3 0 2] aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher'] x = np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3]) print(x) # ['pooh' 'rabbit' 'pooh' 'pooh' 'pooh'] np.random.seed(20200614) x = np.random.randint(0, 10, 3) print(x) # [2 0 1]
對資料集進行洗牌操作
numpy.random.shuffle(x) 對x進行重排序,如果x為多維陣列,只沿第 0 軸洗牌,改變原來的陣列,輸出為None。
import numpy as np np.random.seed(20200614) x = np.arange(10) np.random.shuffle(x) print(x) # [6 8 7 5 3 9 1 4 0 2] print(np.random.shuffle([1, 4, 9, 12, 15])) # None x = np.arange(20).reshape((5, 4)) print(x) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12 13 14 15] # [16 17 18 19]] np.random.shuffle(x) print(x) # [[ 4 5 6 7] # [ 0 1 2 3] # [ 8 9 10 11] # [16 17 18 19] # [12 13 14 15]]
import numpy as np np.random.seed(20200614) x = np.arange(10) y = np.random.permutation(x) print(y) # [6 8 7 5 3 9 1 4 0 2] print(np.random.permutation([1, 4, 9, 12, 15])) # [ 4 1 9 15 12] x = np.arange(20).reshape((5, 4)) print(x) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12 13 14 15] # [16 17 18 19]] y = np.random.permutation(x) print(y) # [[ 8 9 10 11] # [ 0 1 2 3] # [12 13 14 15] # [16 17 18 19] # [ 4 5 6 7]]
到此這篇關於Numpy隨機抽樣的實現的文章就介紹到這了,更多相關Numpy隨機抽樣內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45