Numpy学习第二天——随机抽样

这篇博客介绍了离散型随机变量中的二项分布、泊松分布和超几何分布,以及如何使用Python的numpy和scipy库进行模拟和计算。通过实例展示了如何计算特定事件的概率,并利用matplotlib绘制了相应的概率分布图。此外,还提及了连续型随机变量的均匀分布和正态分布,以及如何生成满足这些分布的随机数。
摘要由CSDN通过智能技术生成

离散型随机变量

二项分布

P = { X = K } = ( n k ) p k ( 1 − p ) n − k P=\{X=K\}=(_n^k)p^k(1-p)^{n-k} P={X=K}=(nk)pk(1p)nk
一次实验只可能有两种结果的概率分布模型。p为一次实验结果一发生的概率,则结果二的概率为1-p,现在做n次实验,则k次为结果一的概率为上述表达式。

【例】野外正在进行9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油的概率是0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率?

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

np.random.seed(20201124)
n = 9  # 一次实验的尝试次数
p = 0.1  # 一次实验的成功次数
size = 50000  # 实验次数
x = np.random.binomial(n, p, size)  # size次二项分布实验
print(np.sum(x == 0) / size)
plt.hist(x)  # 画直方图
plt.xlabel("随机变量:成功次数") 
plt.ylabel("样本中出现的次数")
plt.show()  # 画图
s = stats.binom.pmf(range(10), n, p)  # 概率质量函数,即每个离散值的概率
print(np.around(s, 3))

泊松分布

P ( X = k ) = λ k k ! e − λ , k = 0 , 1 , . . . P(X=k)=\frac{λ^k}{k!}e^{-λ},k=0,1,... P(X=k)=k!λkeλ,k=0,1,...
λ为事件发生的平均次数,求发生k次的概率。

【例】假定某航空公司预定票处平均每小时接到42次订票电话,那么10分钟内恰好接到6次电话的概率是多少?

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

np.random.seed(20201124)
lam = 42 / 6  # 每个十分钟内的平均接电话次数
size = 50000
x = np.random.poisson(lam, size)  # 泊松分布函数,lam即λ,表示发生次数的均值,size为实验次数
print(np.sum(x == 6) / size)
plt.hist(x)
plt.xlabel('随机变量:每十分钟接到订票电话的次数')
plt.ylabel('50000个样本中出现的次数')
plt.show()
x = stats.poisson.pmf(6, lam)
print(x)

在这里插入图片描述

超几何分布

p ( k , M , n , N ) = ( k n ) ( N − k M − n ) ( N M ) p(k,M,n,N)=\frac{(^n_k)(^{M-n}_{N-k})}{(^M_N)} p(k,M,n,N)=(NM)(kn)(NkMn)
总体样本大小为M,其中N为符合目标特征的数量,从中取n个样本,其中有k个为目标特征的概率。

【例】一共20只动物里有7只是狗,抽取12只有3只狗的概率(无放回抽样)。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(20201124)
size = 500000
x = np.random.hypergeometric(ngood=7, nbad=13, nsample=12, size=size)
# ngood + nbad = M,nsample = k,size为实验次数
print(np.sum(x == 3) / size)
plt.hist(x, bins=8)
plt.xlabel('狗的数量')
plt.ylabel('50000个样本中出现的次数')
plt.title('超几何分布', fontsize=20)
plt.show()
x = range(8)
s = stats.hypergeom.pmf(k=x, M=20, n=7, N=12)
print(np.round(s, 3))

在这里插入图片描述

连续型随机变量

均匀分布

在区间[a, b)上,概率密度函数为常数,为 1 b − a \frac{1}{b-a} ba1

【例】在low到high范围内,创建大小为size的均匀分布的随机数。

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

np.random.seed(20201124)
a = 0  # 区间左端点(闭)
b = 100  # 区间右端点(开)
size = 50000  # 略
x = np.random.uniform(a, b, size=size)  # 均匀分布
print(np.all(x >= 0))
print(np.all(x < 100))
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)  # 分布在0-10的概率
b = stats.uniform.cdf(50, 0, 100)  # 分布在0-50的概率
print(b - a)  # 0.4

在这里插入图片描述

正态分布

f ( x ) = e − x 2 2 2 π f(x)=\frac{e^{\frac{-x^2}{2}}}{\sqrt{2π}} f(x)=2π e2x2

【例】根据指定大小产生满足标准正态分布的数组(均值为0,标准差为1)。

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

np.random.seed(20201124)
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)
print(y2)
print(y3)
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)
print(y2)
print(y3)

在这里插入图片描述

指数分布

f ( x ) = { λ e − λ x x > 0 0 x ≤ 0 f(x)=\left\{ \begin{aligned} λe^{-λx} \quad x>0 \\ 0 \quad x\le0 \end{aligned} \right. f(x)={λeλxx>00x0

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

np.random.seed(20201124)
lam = 7
size = 50000
x = np.random.exponential(1 / lam, size)  # 指数分布
y1 = (np.sum(x < 1 / 7)) / size
y2 = (np.sum(x < 2 / 7)) / size
y3 = (np.sum(x < 3 / 7)) / size
print(y1)
print(y2)
print(y3)
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)
print(y2)
print(y3)

在这里插入图片描述

其它随机函数

随机从序列中获取元素

  • numpy.random.choice(a, size=None, replace=True, p=None)
    从序列中获取元素,若a 为整数,元素取值从np.range(a) 中随机获取;若a 为数组,取值从a 数组元素中随机获取。该函数还可以控制生成数组中的元素是否重复replace ,以及选取元素的概率p 。

对数据集进行打乱

  • numpy.random.shuffle(x)
    对x 进行重排序,如果x 为多维数组,只沿第 0 轴洗牌,原地操作。

练习

  • 创建一个形为5×3的二维数组,以包含5到10之间的随机数。
x = np.random.randint(5, 10, [5, 3])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值