Python实现的概率分布运算操作示例

作者:罗兵 时间:2023-02-21 10:16:18 

本文实例讲述了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程序设计有所帮助。

来源:http://www.cnblogs.com/hhh5460/p/5586098.html

标签:Python,概率,运算
0
投稿

猜你喜欢

  • Python实现对文件进行单词划分并去重排序操作示例

    2023-04-08 02:03:07
  • Python爬虫实例爬取网站搞笑段子

    2022-11-29 17:14:33
  • ERROR 1862 (HY000): Your password has expired. To log in you must change it using a .....

    2024-01-12 19:56:51
  • Python中实现远程调用(RPC、RMI)简单例子

    2022-11-20 06:23:27
  • Flask-SQLALchemy基本使用方法

    2023-07-01 23:19:16
  • Python中shape计算矩阵的方法示例

    2022-04-09 20:34:06
  • CI操作cookie的方法分析(基于helper类库)

    2023-11-20 21:59:07
  • Go gRPC服务proto数据验证进阶教程

    2024-03-20 16:54:54
  • Python词法结构

    2022-01-10 00:33:21
  • Python通过解析网页实现看报程序的方法

    2022-07-16 14:27:12
  • Golang控制协程执行顺序方法详解

    2024-02-20 13:00:21
  • PHP中error_reporting()函数的用法(修改PHP屏蔽错误)

    2023-11-20 01:08:17
  • Python数据可视化之用Matplotlib绘制常用图形

    2023-04-05 07:10:46
  • VMWare linux mysql 5.7.13安装配置教程

    2024-01-14 04:17:43
  • Ubuntu 18.04安装mysql 5.7.23

    2024-01-28 19:44:13
  • PowerDesigner中如何导入SQL Server数据库

    2024-01-17 08:38:46
  • IE中不可遍历的属性

    2010-01-19 13:47:00
  • ChatGPT 中文调教指南总结

    2022-12-23 03:44:10
  • Pandas之Fillna填充缺失数据的方法

    2022-11-17 20:17:12
  • PyCharm设置每行最大长度限制的方法

    2021-05-08 15:52:22
  • asp之家 网络编程 m.aspxhome.com