1.均匀分布
1.1标准均匀分布(0-1)
import numpy as np
#满足0-1均匀分布 X~U(a,b) a=0,b=1
s1=np.random.rand(1000)
print(s1)
#期望 E(X)=(a+b)/2=(0+1)/2=0.5
print(s1.mean())
#方差 D(X)=(b-a)²/12=1/12
print(s1.var())
代码运行结果:
0.49659926508513635
0.08177007077913671
1.2均匀分布(a=1,b=4)
import numpy as np
#满足1-4均匀分布 X~U(a,b) a=1,b=4
s2=np.random.uniform(1,4,1000)
print(s2)
#期望 E(X)=(a+b)/2=(1+4)/2=0.5
print(s2.mean())
#方差 D(X)=(b-a)²/12=3/4
print(s2.var())
#绘制直方图
#hist(第一个参数:数据, 2:分成多少组)
plt.hist(s2,50)
#x轴:分成的小区间 y轴:在小区间中分别包含多少个数
plt.show()
代码运行结果:
2.4636368580531967
0.7618935545895295
2.正态分布
2.1标准正态分布(μ=0,σ=1)
import numpy as np
#满足标准正态分布 X~N(μ,σ²) μ=0,σ=1
s3=np.random.randn(1000)
print(s3)
#期望 E(X)=μ=0
print(s3.mean())
#方差 D(X)=σ²=1
print(s3.var())
#绘制直方图
#hist(第一个参数:数据, 2:分成多少组)
plt.hist(s3,50)
#x轴:分成的小区间 y轴:在小区间中分别包含多少个数
plt.show()
代码运行结果:
0.010533220131881613
1.0355896447670396
2.2正态分布(μ=6,σ=4)
import numpy as np
#满足标准正态分布 X~N(μ,σ²) μ=6,σ=4
s4=np.random.normal(6,4,1000)
print(s4)
#期望 E(X)=μ=0
print(s4.mean())
#方差 D(X)=σ²=16
print(s4.var())
#绘制直方图
#hist(第一个参数:数据, 2:分成多少组)
plt.hist(s4,50)
#x轴:分成的小区间 y轴:在小区间中分别包含多少个数
plt.show()
代码运行结果:
5.925563519203148
15.380646647328417
3. 自定义均匀分布
import numpy as np
import matplotlib.pyplot as plt
def uniform(x,a,b):
ls=[]
for i in x:
if a<=i<=b:
y=1/(b-a)
ls.append(y)
else:
ls.append(0)
return ls
def uniform(x,a,b):
y = [1 / (b - a) if a <= i and i <= b else 0 for i in x]
return y
绘制一个a,b不同取值的情况
#绘制a和b等于一个值的情况
x=np.linspace(-10,10,100) #使用numpy生成 -10-10 之间100个点
a=3 # a设置为3
b=5 # b设置为5
y=uniform(x,a,b) #调用函数,计算 y对应的值
plt.plot(x,y) #绘制均匀分布的概率密度函数图像
plt.show()
用for循环实现绘制多个a,b不同取值的图像
# a,b=(-8,0)、(-3,3)、(2,7)
# 用for循环实现绘制多个a,b不同取值的图像
x=np.linspace(-10,10,100) #使用numpy生成 -10-10 之间100个点
ls=[(-8,0),(-3,3),(2,7)]
for k in ls:
a,b=k[0],k[1]
y=uniform(x,a,b) #调用上面uniform函数,计算y对应的值
plt.plot(x,y,label='a={},b={}'.format(a,b))
plt.legend()
plt.show()
4. 自定义正态分布
import numpy as np
import matplotlib.pyplot as plt
def normal(x):
miu = x.mean() # 期望
sigma = x.std() # 标准差
a=(x-miu)**2/(2*sigma**2)
y=1/(sigma*(2*np.pi)**0.5)*np.exp(-a)
return y,miu,sigma
if __name__ == '__main__':
x=np.linspace(4,7,1000)
y,miu,sigma=normal(x) #调用函数,计算 y对应的值
plt.plot(x,y,label=r'$\mu={:.2f},\sigma={:.2f}$'.format(miu,sigma))
plt.legend()
plt.show()
5. 自定义指数分布
import numpy as np
import matplotlib.pyplot as plt
def zhishu(x,r):
y = r * np.exp(-r * x)
return y
if __name__ == '__main__':
x=np.linspace(0,10,1000) #使用numpy生成 0-5之间100个点
r=6 # λ设置为3
y=zhishu(x,r) #调用函数,计算y对应的值
plt.plot(x,y) #绘制指数分布的概率密度函数图像
plt.show()
6. 自定义二项分布
def bioxiang(n,p):
la=[]
for k in range(n+1):
y=sp.comb(n,k)*p**k*(1-p)**(n-k)
la.append(y)
return la
def bioxiang(n,p):
y=[sp.comb(n,k)*p**k*(1-p)**(n-k) for k in range(n+1)]
return y
if __name__ == '__main__':
n = 10
p = 0.6
# x=np.arange(n+1) #使用numpy生成 0,1...10 11个点
x=[i for i in range(n+1)]
y=bioxiang(n,p) #调用函数,计算 y对应的值
plt.scatter(x,y,marker='o') #绘制分布律函数图像
plt.savefig('b.jpeg')
plt.show()
7. 自定义泊松分布
import numpy as np
import scipy.special as sp
import matplotlib.pyplot as plt
def possion(n,rua):
ls=[]
for k in range(n+1):
y=rua**k/(sp.factorial(k))*np.exp(-rua)
ls.append(y)
return ls
def possion(n,rua):
ls=[rua**k/(sp.factorial(k))*np.exp(-rua) for k in range(n+1)]
return ls
if __name__ == '__main__':
n=11
rua=5
x=np.arange(n+1)#使用numpy生成 0,1...20 21个点
y=possion(n,rua)#调用函数,计算 y对应的值
plt.scatter(x,y,marker='o')#绘制分布律函数图像
plt.show()
8. 自定义两点分布
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats
def binpoint(p):
a=0
b=1
y={a:p,b:1-p}
return [y[a],y[b]]
p=0.3
x=np.array([0,1])
y=binpoint(p)
plt.scatter(x,y)
plt.show()
9. 卡方分布
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0, 10, 100)
df=4
y=stats.chi2.pdf(x, df)
plt.plot(x, y)
plt.xlim(0, 10)
plt.ylim(0, 0.4)
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0, 10, 100)
ls=[2,4,7,9]
linestyle=[':', '--', '-.', '-']
for df,lines in zip(ls,linestyle):
y=stats.chi2.pdf(x, df)
plt.plot(x, y,linestyle=lines,label=r'df={}'.format(2,4,7,9))
plt.xlim(0, 10)
plt.ylim(0, 0.4)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Chi-Square Distribution')
plt.legend(loc='upper right')
plt.show()
10. beta分布
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
x = np.arange(0.01, 1, 0.01)
alpha = 1
beta = 1
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha = 1
beta = 3
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha = 1
beta = 5
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha = 1
beta = 7
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
plt.legend(loc="upper left")
plt.xlabel("Number of success")
plt.ylabel("Probablity of success")
plt.legend(loc='upper')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
x = np.arange(0.01, 1, 0.01)
alpha = 0.5
beta = 1
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha = 1
beta = 1
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha = 3
beta = 1
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha = 5
beta = 1
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
plt.legend(loc="upper left")
plt.xlabel("Number of success")
plt.ylabel("Probablity of success")
plt.legend(loc='upper')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
x = np.arange(0.01, 1, 0.01)
alpha = [0.5,1,4,7]
beta = 1
for alpha in alpha:
x = np.arange(0.01, 1, 0.01)
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
alpha=1
beta=[0.5,1,1.5,5]
for beta in beta:
y = stats.beta.pdf(x, alpha, beta)
plt.plot(x, y, label=r'$\alpha={},\beta={}$'.format(alpha, beta))
plt.legend(loc="upper left")
plt.xlabel("Number of success")
plt.ylabel("Probablity of success")
# plt.legend(loc='upper')
plt.show()