欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Numpy隨機(jī)抽樣的實(shí)現(xiàn)

 更新時(shí)間:2023年03月02日 11:06:23   作者:為實(shí)現(xiàn)自我而奮斗  
本文主要介紹了Numpy隨機(jī)抽樣的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

numpy.random 模塊對(duì) Python 內(nèi)置的 random 進(jìn)行了補(bǔ)充,增加了一些用于高效生成多種概率分布的樣本值的函數(shù),如正態(tài)分布、泊松分布等。

一、隨機(jī)模塊

numpy.random.seed(seed=None)

seed()用于指定隨機(jī)數(shù)生成時(shí)所用算法開始的整數(shù)值,如果使用相同的seed()值,則每次生成的隨機(jī)數(shù)都相同,如果不設(shè)置這個(gè)值,則系統(tǒng)根據(jù)時(shí)間來自己選擇這個(gè)值,此時(shí)每次生成的隨機(jī)數(shù)因時(shí)間差異而不同。
在對(duì)數(shù)據(jù)進(jìn)行預(yù)處理時(shí),經(jīng)常加入新的操作或改變處理策略,此時(shí)如果伴隨著隨機(jī)操作,最好還是指定唯一的隨機(jī)種子,避免由于隨機(jī)的差異對(duì)結(jié)果產(chǎn)生影響。

二、離散型隨機(jī)變量

二項(xiàng)分布

二項(xiàng)分布可以用于只有一次實(shí)驗(yàn)只有兩種結(jié)果,各結(jié)果對(duì)應(yīng)的概率相等的多次實(shí)驗(yàn)的概率問題。比如處理猜10次拳贏6次的概率等類似的問題。

二項(xiàng)分布概率函數(shù)的代碼表示:binom.pmf(k) = choose(n, k) pk (1-p)(n-k)

二項(xiàng)分布概率函數(shù)的數(shù)學(xué)表示:

numpy.random.binomial(n, p, size=None)表示對(duì)一個(gè)二項(xiàng)分布進(jìn)行采樣,size表示采樣的次數(shù),n表示做了n重伯努利試驗(yàn),p表示成功的概率,函數(shù)的返回值表示n中成功的次數(shù)

【例】野外正在進(jìn)行9(n=9)口石油勘探井的發(fā)掘工作,每一口井能夠開發(fā)出油的概率是0.1(p=0.1)。請(qǐng)問,最終所有的勘探井都勘探失敗的概率?

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(20200605)
n = 9# 做某件事情的次數(shù)
p = 0.1# 做某件事情成功的概率
size = 50000
x = np.random.binomial(n, p, size)
'''或者使用binom.rvs
#使用binom.rvs(n, p, size=1)函數(shù)模擬一個(gè)二項(xiàng)隨機(jī)變量,可視化地表現(xiàn)概率
y = stats.binom.rvs(n, p, size=size)#返回一個(gè)numpy.ndarray
'''
print(np.sum(x == 0) / size) ?# 0.3897

plt.hist(x)
plt.xlabel('隨機(jī)變量:成功次數(shù)')
plt.ylabel('樣本中出現(xiàn)的次數(shù)')
plt.show()
#它返回一個(gè)列表,列表中每個(gè)元素表示隨機(jī)變量中對(duì)應(yīng)值的概率
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次,請(qǐng)問兩次都為正面的概率?

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

np.random.seed(20200605)
n = 2# 做某件事情的次數(shù),這里是投兩次硬幣
p = 0.5#做某件事情成功的概率,在這里即投硬幣為正面的概率
size = 50000
x = np.random.binomial(n, p, size)
'''或者使用binom.rvs
#使用binom.rvs(n, p, size=1)函數(shù)模擬一個(gè)二項(xiàng)隨機(jī)變量,可視化地表現(xiàn)概率
y = stats.binom.rvs(n, p, size=size)#返回一個(gè)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('隨機(jī)變量:硬幣為正面次數(shù)')
plt.ylabel('50000個(gè)樣本中出現(xiàn)的次數(shù)')
plt.show()
#它返回一個(gè)列表,列表中每個(gè)元素表示隨機(jī)變量中對(duì)應(yīng)值的概率
s = stats.binom.pmf(range(n + 1), n, p)
print(np.around(s, 3))
# [0.25 0.5 ?0.25]

計(jì)算期望和方差

期望:E(x) = np
方差:Var(x) = np(1-p)
利用stats.binom.stats(n, p, loc=0, moments='mv')計(jì)算期望和方差
moments參數(shù)中:m為期望,v為方差

泊松分布

泊松分布主要用于估計(jì)某個(gè)時(shí)間段某事件發(fā)生的概率。

泊松概率函數(shù)的代碼表示:poisson.pmf(k) = exp(-lam) lam*k / k!

泊松概率函數(shù)的數(shù)學(xué)表示:

numpy.random.poisson(lam=1.0, size=None)表示對(duì)一個(gè)泊松分布進(jìn)行采樣,size表示采樣的次數(shù),lam表示一個(gè)單位內(nèi)發(fā)生事件的平均值,函數(shù)的返回值表示一個(gè)單位內(nèi)事件發(fā)生的次數(shù)。
【例】假定某航空公司預(yù)定票處平均每小時(shí)接到42次訂票電話,那么10分鐘內(nèi)恰好接到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個(gè)隨機(jī)變量
x = stats.poisson.rvs(lam,size=size)
'''
print(np.sum(x == 6) / size) ?# 0.14988

plt.hist(x)
plt.xlabel('隨機(jī)變量:每十分鐘接到訂票電話的次數(shù)')
plt.ylabel('50000個(gè)樣本中出現(xiàn)的次數(shù)')
plt.show()
#用poisson.pmf(k, mu)求對(duì)應(yīng)分布的概率:概率質(zhì)量函數(shù) (PMF)
x = stats.poisson.pmf(6, lam)
print(x) ?# 0.14900277967433773

超幾何分布

在超幾何分布中,各次實(shí)驗(yàn)不是獨(dú)立的,各次實(shí)驗(yàn)成功的概率也不等。 超幾何分布概率函數(shù)的數(shù)學(xué)表示:

numpy.random.hypergeometric(ngood, nbad, nsample, size=None)表示對(duì)一個(gè)超幾何分布進(jìn)行采樣,size表示采樣的次數(shù),ngood表示總體中具有成功標(biāo)志的元素個(gè)數(shù),nbad表示總體中不具有成功標(biāo)志的元素個(gè)數(shù),ngood+nbad表示總體樣本容量,nsample表示抽取元素的次數(shù)(小于或等于總體樣本容量),函數(shù)的返回值表示抽取nsample個(gè)元素中具有成功標(biāo)識(shí)的元素個(gè)數(shù)。

【例】一共20只動(dòng)物里有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('狗的數(shù)量')
plt.ylabel('50000個(gè)樣本中出現(xiàn)的次數(shù)')
plt.title('超幾何分布',fontsize=20)
plt.show()

"""
M 為總體容量
n 為總體中具有成功標(biāo)志的元素的個(gè)數(shù)
N,k 表示抽取N個(gè)元素有k個(gè)是成功元素
"""
x = range(8)
#用hypergeom.pmf(k, M, n, N, loc)來計(jì)算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次實(shí)驗(yàn)的超幾何分布,令p=n/M,當(dāng)總體容量足夠大時(shí)((M-N)/(M-1))近似于1,此時(shí)數(shù)學(xué)期望為Np,方差為Np(1-p).
#用stats(M, n, N, loc=0, moments='mv')計(jì)算均值和方差
stats.hypergeom.stats(20,7,12,moments='mv')

三、連續(xù)型隨機(jī)變量

均勻分布

  • numpy.random.uniform(low=0.0, high=1.0, size=None)
  • Samples are uniformly distributed over the half-open interval [low, high) (includes low, but excludes high). In other words, any value within the given interval is equally likely to be drawn by uniform.

【例】在low到high范圍內(nèi),創(chuàng)建大小為size的均勻分布的隨機(jī)數(shù)。

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)之間的均勻分布的隨機(jī)數(shù)。

  • numpy.random.rand(d0, d1, ..., dn)Random values in a given shape.

【例】根據(jù)指定大小產(chǎn)生[0,1)之間均勻分布的隨機(jī)數(shù)。

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)之間均勻分布的隨機(jī)整數(shù)。

  • numpy.random.randint(low, high=None, size=None, dtype='l') Return random integers from low (inclusive) to high (exclusive).

【例】若high不為None時(shí),取[low,high)之間隨機(jī)整數(shù),否則取值[0,low)之間隨機(jī)整數(shù)。

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]]

四、正態(tài)分布

標(biāo)準(zhǔn)的正太分布數(shù)學(xué)表示:

  • numpy.random.randn(d0, d1, ..., dn) Return a sample (or samples) from the “standard normal” distribution.

【例】根據(jù)指定大小產(chǎn)生滿足標(biāo)準(zhǔn)正態(tài)分布的數(shù)組(均值為0,標(biāo)準(zhǔn)差為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

還可以指定分布以及所需參數(shù)來進(jìn)行隨機(jī),例如高斯分布中的mu和sigma。

  • numpy.random.normal(loc=0.0, scale=1.0, size=None)Draw random samples from a normal (Gaussian) distribution.normal()為創(chuàng)建均值為 loc(mu),標(biāo)準(zhǔn)差為 scale(sigma),大小為 size 的數(shù)組。
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(20200614)
x = 0.5 * np.random.randn(2, 4) + 5
'''或者
#模擬10000個(gè)隨機(jī)變量
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#標(biāo)準(zhǔn)差
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(#樣本標(biāo)準(zhǔn)差)
'''
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()

五、指數(shù)分布

指數(shù)分布描述時(shí)間發(fā)生的時(shí)間長(zhǎng)度間隔。

指數(shù)分布的數(shù)學(xué)表示:

  • numpy.random.exponential(scale=1.0, size=None)Draw samples from an exponential distribution.

【例】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

其他隨機(jī)函數(shù)

隨機(jī)從序列中獲取元素

  • numpy.random.choice(a, size=None, replace=True, p=None)從序列中獲取元素,若a為整數(shù),元素取值從np.range(a)中隨機(jī)獲??;若a為數(shù)組,取值從a數(shù)組元素中隨機(jī)獲取。該函數(shù)還可以控制生成數(shù)組中的元素是否重復(fù)replace,以及選取元素的概率p。
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]

對(duì)數(shù)據(jù)集進(jìn)行洗牌操作

numpy.random.shuffle(x) 對(duì)x進(jìn)行重排序,如果x為多維數(shù)組,只沿第 0 軸洗牌,改變?cè)瓉淼臄?shù)組,輸出為None。

  • 【例】洗牌,改變自身內(nèi)容,打亂順序。
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]]
  • numpy.random.permutation(x)permutation()函數(shù)的作用與shuffle()函數(shù)相同,可以打亂第0軸的數(shù)據(jù),但是它不會(huì)改變?cè)瓉淼臄?shù)組。
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]]

到此這篇關(guān)于Numpy隨機(jī)抽樣的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Numpy隨機(jī)抽樣內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python打包成exe的兩種方法

    Python打包成exe的兩種方法

    python的開發(fā)效率非常的高,但是當(dāng)我們用python寫一些小工具需要給用戶使用的時(shí)候,用戶大多數(shù)是沒有安裝python的,本文介紹兩種python的打包方案,使用pyinstaller和nuitka打包成exe,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • python工具模塊介紹之time?時(shí)間訪問和轉(zhuǎn)換的示例代碼

    python工具模塊介紹之time?時(shí)間訪問和轉(zhuǎn)換的示例代碼

    這篇文章主要介紹了python工具模塊介紹-time?時(shí)間訪問和轉(zhuǎn)換,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家啊的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • python 用pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能

    python 用pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能

    這篇文章主要介紹了python 用pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 用python寫的一個(gè)wordpress的采集程序

    用python寫的一個(gè)wordpress的采集程序

    在學(xué)習(xí)python的過程中,經(jīng)過不斷的嘗試及努力,終于完成了第一個(gè)像樣的python程序,雖然還有很多需要優(yōu)化的地方,但是目前基本上實(shí)現(xiàn)了我所要求的功能,需要的朋友可以參考下
    2016-02-02
  • python中extend功能用法舉例

    python中extend功能用法舉例

    這篇文章主要給大家介紹了關(guān)于python中extend功能的相關(guān)資料,Python中的extend()方法是一種非常有用的列表操作,它可以將一個(gè)列表中的元素添加到另一個(gè)列表的末尾,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于Pycharm亂碼解決大全

    關(guān)于Pycharm亂碼解決大全

    這篇文章主要介紹了關(guān)于Pycharm亂碼解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用url_helper簡(jiǎn)化Python中Django框架的url配置教程

    使用url_helper簡(jiǎn)化Python中Django框架的url配置教程

    這篇文章主要介紹了使用url_helper簡(jiǎn)化Python中Django框架的url配置教程,需要的朋友可以參考下
    2015-05-05
  • python 按不同維度求和,最值,均值的實(shí)例

    python 按不同維度求和,最值,均值的實(shí)例

    今天小編就為大家分享一篇python 按不同維度求和,最值,均值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 在Python中使用HTMLParser解析HTML的教程

    在Python中使用HTMLParser解析HTML的教程

    這篇文章主要介紹了在Python中使用HTMLParser解析HTML的教程,尤其是在用Python制作爬蟲程序的時(shí)候經(jīng)常可以用到,需要的朋友可以參考下
    2015-04-04
  • 解決Pycharm中import時(shí)無法識(shí)別自己寫的程序方法

    解決Pycharm中import時(shí)無法識(shí)別自己寫的程序方法

    今天小編就為大家分享一篇解決Pycharm中import時(shí)無法識(shí)別自己寫的程序方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論