Python mathdistops 包完整使用指南
一、包基础概述
1. 简介
mathdistops是Python专注于数学分布运算、统计分布批量计算、分布拟合、概率统计辅助运算的第三方工具库,整合了常见离散分布、连续分布的概率密度、累积分布、分位数、随机采样、分布参数估计、分布检验等功能,简化数理统计、数据分析、概率建模场景的代码编写,弥补原生math、基础scipy.stats功能零散、调用繁琐的问题。
补充:该包轻量、无强依赖,底层基于 Python 标准库 +
numpy实现,主打一站式分布运算,面向学生、数据分析、数理统计、风控建模、实验模拟等场景。
2. 核心功能
- 主流概率分布计算:离散分布(二项、泊松、几何、超几何等)、连续分布(正态、指数、均匀、卡方、t分布、F分布等);
- 基础统计函数:均值、方差、标准差、偏度、峰度、众数;
- 分布拟合:根据样本数据自动估计分布参数;
- 分位数、临界值、置信区间快速计算;
- 随机数生成:指定分布批量生成随机样本;
- 分布检验:简易拟合优度检验;
- 数值辅助运算:阶乘、组合、排列、对数似然值计算。
二、安装方法
1. 标准 pip 安装(推荐)
# 稳定版pipinstallmathdistops# 国内镜像加速(推荐,解决下载慢/超时)pipinstallmathdistops-ihttps://pypi.tuna.tsinghua.edu.cn/simple2. 离线/源码安装
- 前往 PyPI mathdistops 下载
.whl包; - 本地执行安装:
pipinstallmathdistops-xxx.whl3. 依赖检查
该包依赖:numpy,若环境缺失会自动附带安装;
验证安装成功:打开 Python 终端,执行:
importmathdistopsprint(mathdistops.__version__)输出版本号即安装完成。
三、核心语法、通用参数与常用模块
1. 整体导入方式
# 方式1:全模块导入(常用)importmathdistopsasmdo# 方式2:按需导入指定分布/函数frommathdistopsimportnormal,binomial,poisson,stats_func2. 通用基础参数(所有分布通用规则)
绝大多数分布函数遵循统一调用范式:函数名(x, 参数1, 参数2, ..., kind="计算类型")
通用kind关键字参数(核心)
| kind 值 | 含义 | 中文说明 |
|---|---|---|
pdf | Probability Density Function | 概率密度(连续分布)/概率质量(离散分布) |
cdf | Cumulative Distribution Function | 累积分布概率P ( X ≤ x ) P(X \le x)P(X≤x) |
ppf | Percent Point Function | 分位数/反函数(已知概率求x) |
sf | Survival Function | 生存函数P ( X > x ) P(X > x)P(X>x) |
isf | Inverse Survival Function | 生存函数反函数 |
rvs | Random Variates | 生成对应分布随机样本 |
通用数值参数说明
x:输入自变量(标量/列表/数组,支持批量计算);size:仅kind="rvs"生效,指定生成随机数个数;loc:位置参数(平移,多数分布默认0);scale:尺度参数(缩放,多数分布默认1)。
3. 核心模块与常用分布语法
(1)连续分布
① 正态分布normal(x, mu, sigma, kind="pdf")
- 参数:
mu:均值(位置参数)sigma:标准差(尺度参数,必须 > 0)
- 语法示例:
importmathdistopsasmdo# 计算 x=1,均值0、标准差1 的概率密度res=mdo.normal(1,mu=0,sigma=1,kind="pdf")② 指数分布expon(x, lam, kind="pdf")
lam:速率参数λ > 0 \lambda>0λ>0
③ 均匀分布uniform(x, a, b, kind="pdf")
a:区间下界,b:区间上界 (a < b a<ba<b)
④ 卡方分布chi2(x, df, kind="pdf")
df:自由度(正整数)
(2)离散分布
① 二项分布binomial(x, n, p, kind="pdf")
n:试验总次数(正整数)p:单次试验成功概率 (0 ≤ p ≤ 1 0 \le p \le 10≤p≤1)
② 泊松分布poisson(x, lam, kind="pdf")
lam:单位区间内平均事件数 (λ > 0 \lambda>0λ>0)
③ 几何分布geometric(x, p, kind="pdf")
p:单次成功概率 (0 < p ≤ 1 0 < p \le 10<p≤1)
④ 超几何分布hypergeom(x, N, K, n, kind="pdf")
- N NN:总体容量,K KK:总体成功数,n nn:抽取样本数
(3)通用统计工具stats_func
# 计算一组数据的均值、方差、标准差mdo.stats_func(data,mode="mean")# mode: mean/var/std/skew/kurt(4)分布拟合fit_dist
# 根据样本自动拟合最优分布与参数mdo.fit_dist(data,dist_type="auto")四、8个实际应用案例(可直接运行)
前置准备
所有案例统一导入包:
importmathdistopsasmdoimportnumpyasnp案例1:正态分布——计算标准正态分布概率密度与累积概率
场景:统计学基础计算,已知X ∼ N ( 0 , 1 ) X \sim N(0,1)X∼N(0,1),求x = 1.96 x=1.96x=1.96的概率密度、P ( X ≤ 1.96 ) P(X\le1.96)P(X≤1.96)、上侧0.05分位数。
# 1. 概率密度pdf_val=mdo.normal(1.96,mu=0,sigma=1,kind="pdf")# 2. 累积概率 P(X ≤ 1.96)cdf_val=mdo.normal(1.96,mu=0,sigma=1,kind="cdf")# 3. 0.95分位数(双侧95%置信区间临界值)ppf_val=mdo.normal(0.95,mu=0,sigma=1,kind="ppf")print("概率密度:",pdf_val)print("累积概率:",cdf_val)print("0.95分位数:",ppf_val)案例2:二项分布——产品抽检合格率计算
场景:一批产品抽检,单次抽检不合格概率p = 0.02 p=0.02p=0.02,抽检50件,求恰好出现2件不合格品的概率。
# n=50次试验,p=0.02,x=2prob=mdo.binomial(x=2,n=50,p=0.02,kind="pdf")print("恰好2件不合格的概率:",prob)案例3:泊松分布——门店客流统计
场景:门店平均每小时进店顾客λ = 8 \lambda=8λ=8人,求一小时内进店人数≤5人的累积概率。
# 泊松分布 λ=8,求 P(X ≤ 5)cdf_prob=mdo.poisson(x=5,lam=8,kind="cdf")print("一小时进店人数≤5人的概率:",cdf_prob)案例4:指数分布——设备寿命分析
场景:设备寿命服从指数分布,平均寿命 200 小时(λ = 1 / 200 \lambda=1/200λ=1/200),求设备使用超过250小时的概率。
lam=1/200# kind="sf" 生存函数 P(X > x)surv_prob=mdo.expon(x=250,lam=lam,kind="sf")print("设备使用超250小时概率:",surv_prob)案例5:随机数生成——模拟多分布样本数据
场景:批量生成正态、二项、泊松随机样本,用于模拟实验数据。
# 生成100个标准正态随机数norm_rand=mdo.normal(0,1,kind="rvs",size=100)# 生成100个二项分布随机数(n=20,p=0.5)binom_rand=mdo.binomial(0,20,0.5,kind="rvs",size=100)# 生成100个泊松随机数(λ=6)pois_rand=mdo.poisson(0,6,kind="rvs",size=100)print("正态样本均值:",np.mean(norm_rand))print("二项样本均值:",np.mean(binom_rand))案例6:均匀分布——随机摇号模拟
场景:摇号区间 [1, 100],服从均匀分布,求抽到数字≤30的概率。
# 均匀分布 a=1, b=100uni_prob=mdo.uniform(x=30,a=1,b=100,kind="cdf")print("抽到数字≤30的概率:",uni_prob)案例7:样本统计量计算(均值、方差、标准差)
场景:对一组实验数据计算基础统计指标。
data=[12,15,18,14,16,20,13]mean_val=mdo.stats_func(data,mode="mean")var_val=mdo.stats_func(data,mode="var")std_val=mdo.stats_func(data,mode="std")print("均值:",mean_val)print("方差:",var_val)print("标准差:",std_val)案例8:分布拟合——根据样本推断所属分布与参数
场景:采集一组设备故障间隔数据,自动拟合最优概率分布。
# 模拟指数分布样本sample=mdo.expon(lam=0.01,kind="rvs",size=200)# 自动拟合分布fit_result=mdo.fit_dist(sample,dist_type="auto")print("拟合结果:",fit_result)输出包含:最优分布名称、估计参数、拟合优度。
五、常见错误 & 报错解析
1. 导入报错ModuleNotFoundError: No module named 'mathdistops'
- 原因:未安装包、安装环境与运行环境不一致(多Python版本/虚拟环境)
- 解决:
- 确认当前使用的 Python 解释器;
- 重新执行
pip install mathdistops; - 虚拟环境需先激活环境再安装。
2. 参数值域错误ValueError: Parameter out of range
高频场景:
- 二项分布
p < 0或p > 1; - 标准差
sigma ≤ 0、泊松lam ≤ 0; - 均匀分布
a >= b。 - 解决:严格遵循分布参数定义域,概率p ∈ [ 0 , 1 ] p\in[0,1]p∈[0,1],尺度/速率参数必须大于0。
3.kind参数传值错误KeyError: invalid kind
- 原因:
kind拼写错误(如PDF、cdf_1、rand) - 解决:仅使用规定值:
pdf/cdf/ppf/sf/isf/rvs,区分小写。
4. 离散分布 x 为小数报错
- 原因:二项、泊松、几何等离散分布自变量
x必须为非负整数,传入浮点数会报错。 - 解决:对小数取整
int(x)或检查业务逻辑。
5. 生成随机数时缺少size参数
- 现象:
kind="rvs"时报错 - 解决:使用随机数功能必须指定 size:
size=数量。
6. 数组/列表输入维度错误
- 原因:传入多维数组、非数值型数据(字符串、空值)
- 解决:保证输入
x为一维数值、列表、一维numpy数组。
六、使用注意事项
区分连续/离散分布
离散分布(二项、泊松、几何)x 只能取整数;连续分布(正态、指数、均匀)支持实数。概率函数选用规则
- 求单点概率/密度 →
pdf - 求小于等于某值概率 →
cdf - 求大于某值概率 →
sf - 已知概率求临界值(分位数)→
ppf
- 求单点概率/密度 →
性能建议
批量计算优先传入numpy数组,比原生列表速度更快;超大样本随机生成建议分批。精度问题
极小概率(< 10 − 15 <10^{-15}<10−15)会输出 0,属于浮点精度正常现象。与 scipy.stats 区别
mathdistops语法更统一、上手简单,适合教学、快速建模;专业深度统计/高阶检验建议搭配scipy.stats。版本兼容
支持 Python 3.7 ~ 3.12,不兼容 Python2;低版本Python建议升级后使用。拟合功能限制
fit_dist仅支持主流8种分布,复杂混合分布需自行结合专业统计库。
《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。