文章目录
一、二项分布:numpy.random.binomial(n, p, size)
1、返回值: 返回包含size个的随机数数组,其中每个随机数来自n次尝试中的成功次数,p为每次尝试成功的概率
2、经典案例——猜硬币游戏
初始筹码1000,每轮猜9次,猜对5次或5次以上为赢,筹码加一,否则为输,筹码减一。
用程序模拟10000轮,记录筹码数的变化,即为binomial(9, 0.5, 10000)
3、测试代码
import numpy as np
import matplotlib.pylab as mp
outcomes = np.random.binomial(9, 0.5, 10000) # 记录成功曲线的数据
chips = [1000] #记录筹码的变化
for outcome in outcomes:
if outcome >= 5 :
chips.append(chips[-1]+1) # 则将最后一个筹码+1
else:
chips.append(chips[-1] - 1)
chips = np.array(chips) # 变成数组
# 基本图形参数
mp.figure('Binomial', facecolor='lightgray')
mp.title('Binomial', fontsize=20)
mp.xlabel("Round", fontsize=14)
mp.ylabel('Chip', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
二、超几何分布:numpy.random.hypergeometric(ngood, nbad, nsample, size)
1、返回值: 返回包含size个随机数的数组,其中每个随机数来自随机抽取nsample个样本中好样本的个数,ngood个好样本,nbad个坏样本。
2、经典案例——摸球球游戏: 将25个好球和1个坏球放在一起,每一轮摸出3个球,若全为好球则加1分,若有坏球则减6分。模拟程序模拟100轮,记录分值的变化。hypergeometric(25, 1, 3, 100)
3、测试代码
import numpy as np
import matplotlib.pylab as mp
outcomes = np.random.hypergeometric(25, 1, 3, 100) # 记录成功曲线的数据
scores = [0] #记录得分的变化
for outcome in outcomes:
if outcome == 3 :
scores.append(scores[-1]+1) # 则将最后一个筹码+1
else:
scores.append(scores[-1] - 6)
scores = np.array(scores) # 变成数组
# 基本图形参数
mp.figure('Hypergeometric', facecolor='lightgray')
mp.title('Hypergeometric', fontsize=20)
mp.xlabel("Round", fontsize=14)
mp.ylabel('Score', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 绘制图像
if scores[-1] < scores[0]: # 小于最开始的筹码数,就是输了
color = 'orangered'
elif scores[-1] > scores[0]: # 赢了
color = 'limegreen'
else:
color = 'dodgerblue'
mp.plot(scores, c=color, label='Chip')
mp.legend()
mp.show()
三、正态分布:numpy.random.normal(size)
1、返回值: 输出包含size个随机数的数组,其中每个随机数服从标准正态分布规律,即平均值为0,标准差为1的正态分布。
2、经典案例
import numpy as np
import matplotlib.pylab as mp
samples = np.random.normal(size=10000) # 记录成功曲线的数据
# 验证平均值和标准差(接近0和接近1)
print(samples.mean(), samples.std())
# 基本图形参数
mp.figure('Standard Normal', facecolor='lightgray')
mp.title('Standard Normal', fontsize=20)
mp.xlabel("Sample", fontsize=14)
mp.ylabel('Occurrence', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(axis='y', linestyle=':') # 只画水平网格线
# 绘制图像(直方图),100表示分成100段,normed表示按照比例显示纵坐标
mp.hist(samples, 100,
edgecolor='steelblue',
facecolor='deepskyblue',
label="Standard Normal")
mp.legend()
mp.show()
3、测试效果