python如何计算概率事件_Python实现的概率分布运算操作示例

本文实例讲述了Python实现的概率分布运算操作。分享给大家供大家参考,具体如下:

1. 二项分布(离散)

import numpy as np

from scipy import stats

import matplotlib.pyplot as plt

'''

# 二项分布 (binomial distribution)

# 前提:独立重复试验、有放回、只有两个结果

# 二项分布指出,随机一次试验出现事件A的概率如果为p,那么在重复n次试验中出现k次事件A的概率为:

# f(n,k,p) = choose(n, k) * p**k * (1-p)**(n-k)

'''

# ①定义二项分布的基本信息

p = 0.4 # 事件A概率0.4

n = 5 # 重复实验5次

k = np.arange(n+1) # 6种可能出现的结果

#k = np.linspace(stats.binom.ppf(0.01,n,p), stats.binom.ppf(0.99,n,p), n+1) #另一种方式

# ②计算二项分布的概率质量分布 (probability mass function)

# 之所以称为质量,是因为离散的点,默认体积(即宽度)为1

# P(X=x) --> 是概率

probs = stats.binom.pmf(k, n, p)

#array([ 0.07776, 0.2592 , 0.3456 , 0.2304 , 0.0768 , 0.01024])

#plt.plot(k, probs)

# ③计算二项分布的累积概率 (cumulative density function)

# P(X<=x) --> 也是概率

cumsum_probs = stats.binom.cdf(k, n, p)

#array([ 0.07776, 0.33696, 0.68256, 0.91296, 0.98976, 1. ])

# ④根据累积概率得到对应的k,这里偷懒,直接用了上面的cumsum_probs

k2 = stats.binom.ppf(cumsum_probs, n, p)

#array([0, 1, 2, 3, 4, 5])

# ⑤伪造符合二项分布的随机变量 (random variates)

X = stats.binom.rvs(n,p,size=20)

#array([2, 3, 1, 2, 2, 2, 1, 2, 2, 3, 3, 0, 1, 1, 1, 2, 3, 4, 0, 3])

#⑧作出上面满足二项分布随机变量的频数直方图(类似group by)

plt.hist(X)

#⑨作出上面满足二项分布随机变量的频率分布直方图

plt.hist(X, normed=True)

plt.show()

2. 正态分布(连续)

'''

标准正态分布

密度函数:f(x) = exp(-x**2/2)/sqrt(2*pi)

'''

x = np.linspace(stats.norm.ppf(0.01), stats.norm.ppf(0.99), 100)

# 概率密度分布函数(Probability density function)

# 之所以称为密度,是因为连续的点,默认体积为0

# f(x) --> 不是概率

probs = norm.pdf(x)

# plt.plot(x, probs, 'r-', lw=5, alpha=0.6, label='norm pdf')

# 累积概率密度函数 Cumulative density function

# 定积分 ∫_-oo^a f(x)dx --> 是概率

cumsum_probs = stats.norm.cdf(x)

# 伪造符合正态分布的随机变量X

# 通过loc和scale参数可以指定随机变量的偏移和缩放参数。对于正态分布的随机变量来说,这两个参数相当于指定其期望值和标准差:

X = stats.norm.rvs(loc=1.0, scale=2.0, size=1000)

#⑨作出上面正态分布随机变量的频率分布直方图

plt.hist(X, normed=True, histtype='stepfilled', alpha=0.2)

plt.legend(loc='best', frameon=False)

plt.show()

# 对给定的数据进行参数估计。这里偷懒了,就用上面的X

mean, std = stats.norm.fit(X)

#array(1.01810091), array(2.00046946)

附:NumPy、SciPy与MatPlotLib模块下载地址:

NumPy: http://sourceforge.net/projects/numpy/files/NumPy/1.9.2/

SciPy: http://sourceforge.net/projects/scipy/files/scipy/0.15.1/

MatPlotLib: http://matplotlib.org/downloads.html

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

本文标题: Python实现的概率分布运算操作示例

本文地址: http://www.cppcns.com/jiaoben/python/199692.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值