numpy随机数
主要用的是random模块
我们既可以生成连续分布的随机数,也可以生成非连续分布的随机数。分布函数有一个可选的size参数,它能通知numpy要创建多少个数字。我们可以用整型或者元组来给这个参数赋值,这时会得到相应形状的数组,其值由随机数填充。离散分布包括几何分布,超几何分布。连续分布包括正态分布和对数正态分布。
二项式分布
假设现在我手上有1000个硬币,一次扔9枚,如果人头朝上多于5个,我就赢了一个硬币;反之则输一个硬币
用binomial()函数进行模拟
import numpy as np
from matplotlib.pyplot import plot,show
#将binomial()函数的size设为10000,表示我们将投10000次硬币
cash=np.zeros(10000)
cash[0]=1000
outcome=np.random.binomial(9,0.5,size=len(cash))
#更新剩余的现金
for i in range(1,len(cash)):
if outcome[i]<5:
cash[i]=cash[i-1]-1
elif outcome[i]<10:
cash[i]=cash[i-1]+1
else:
raise AssertionError("Unexpectedd outcome"+outcome)
print(outcome.min(),outcome.max())
#用matplotlib画出cash数组图像
plot(np.arange(len(cash)),cash)
show()
正态分布
连续分布是通过pdf(概率密度函数)进行建模的。在特定区间发生某事件的可能性可以通过概率密度函数的积分运算求出。
import numpy as np
import matplotlib.pyplot as plt
#借助normal()函数创造指定数量的随机数
N=10000
normal_values=np.random.normal(size=N)
#画图,这里中心值为0,标准差为1;
dummy,bins,dummy=plt.hist(normal_values,int(np.sqrt(N)),normed=True,lw=1)
sigma=1
mu=0
plt.plot(bins,1/(sigma*np.sqrt(2*np.pi))*np.exp(-(bins-mu)**2/(2*sigma**2)),lw=2)
plt.show()