原文链接: python3 概率论 作业
上一篇: python 概率统计
下一篇: python3 scipy stats 使用 常见分布的操作
(1)模拟求解和使用分布函数求解的对比,基本一致
from scipy import stats X = stats.norm(loc=1.5, scale=0.5) # p{1.8<x<2.9} print(X.cdf(2.9) - X.cdf(1.8)) # 模拟求解 cnt = 0 all_num = 100000 for i in range(all_num): t = X.rvs() # print(t) if 2.9 > t > 1.8: cnt += 1 print(cnt / all_num) 0.27169798742 0.27318
(2) 直接使用分位函数
X = stats.norm(loc=1.5, scale=0.5) print(X.ppf(0.95)) 2.32242681348
(3)
X = stats.norm(loc=0, scale=1) Y = stats.norm(loc=0, scale=2) Z = stats.norm(loc=0, scale=4) t = np.arange(-5, 5, 0.01) pl.plot(t, X.pdf(t), label="$X$", color="red") pl.plot(t, Y.pdf(t), label="$Y$", color="blue") pl.plot(t, Z.pdf(t), label="$Z$", color="yellow") pl.show()
X = stats.norm(loc=0, scale=1) Y = stats.norm(loc=2, scale=1) Z = stats.norm(loc=-2, scale=1) t = np.arange(-5, 5, 0.01) # sns.distplot(X.rvs(size=10000)) # pl.show() pl.plot(t, X.pdf(t), label="$X$", color="red") pl.plot(t, Y.pdf(t), label="$Y$", color="blue") pl.plot(t, Z.pdf(t), label="$Z$", color="yellow") pl.show()
(3) 使用参数为1的指数分布验证中心极限定理
from scipy import stats
from scipy.stats import expon
from scipy.stats import norm
import pylab as pl
import numpy as np
import seaborn as sns
# 参数为1 的指数分布
e = expon()
print(e.mean(), e.var(), e.std())
d = e.rvs(size=10000)
# 指数分布的概率密度图像
sns.distplot(d, hist=False, color="r", kde_kws={"shade": False})
pl.show()
# 十个指数分布的随机变量和的概率密度图像
all_num = 100
# 只需要加n-1次
for i in range(all_num-1):
d += e.rvs(size=10000)
sns.distplot(d, hist=False, color="g", kde_kws={"shade": False})
print(norm.fit(d))
# 理论值
print(all_num, all_num ** 0.5)
pl.show()
n=10
(9.9733002779022275, 3.1794247621538174)
10 3.1622776601683795
n=100
(99.968901023434967, 9.9684825279139382)
100 10.0
(4)
t 分布,红色是标准正态分布,蓝色是t分布
from scipy import stats
from scipy.stats import expon
from scipy.stats import norm
import pylab as pl
from scipy.stats import t
import numpy as np
import seaborn as sns
# t 分布的颜色和维度关系
colors = {
'red': 1,
'black': 5,
'blue': 10,
'green': 20,
'yellow': 40,
}
nm = norm.rvs(size=1000)
for color, n in colors.items():
d = t.rvs(n, size=1000)
sns.distplot(d, color='red', hist=False, kde_kws={"shade": False})
sns.distplot(nm, color='blue', hist=False, kde_kws={"shade": False})
pl.show()
n=1
n=5
n=10
n=20
n=40
f分布
from scipy import stats
from scipy.stats import expon
from scipy.stats import norm
import pylab as pl
from scipy.stats import t
from scipy.stats import f
import numpy as np
import seaborn as sns
# t 分布的颜色和维度关系
lst = [
1, 3, 5, 7, 10, 15, 20
]
for i in lst:
rv = f(10, i)
d = rv.rvs(size=1000)
sns.distplot(d, color='red', hist=False, kde_kws={"shade": False})
pl.show()
f(10,1)
f(10,15)