SciPy 几何分布完全指南:scipy.stats.geom 的数学定义、实现原理与实战用法
SciPy 几何分布完全指南scipy.stats.geom 的数学定义、实现原理与实战用法【免费下载链接】scipySciPy library main repository项目地址: https://gitcode.com/gh_mirrors/sc/scipy几何分布Geometric Distribution是概率论中刻画首次成功所需试验次数的基础离散分布当每次独立试验的成功概率为p时随机变量k表示直到首次成功所进行的试验次数。本文以 几何分布官方教程 为骨架结合 SciPy 中scipy.stats.geom的源码实现scipy/stats/_discrete_distns.py完整推导其概率质量函数PMF、累积分布函数CDF、分位数、矩与矩生成函数并给出参数校验、数值稳定性设计、随机抽样与边界行为等源码级分析帮助读者在工程中正确、高效地使用该分布。一、几何分布的定义与背景几何分布属于 SciPy 离散统计分布家族描述伯努利试验序列中首次成功所需的试验次数。其核心设定为每次试验相互独立每次试验的成功概率恒为p失败概率为1 - p随机变量k表示获得一次成功所需的试验次数取值k ≥ 1。与首次成功前失败的次数即 Planck 分布scipy.stats.planck不同几何分布从 1 开始计数。例如掷硬币p0.5连续抛掷直到出现正面抛掷次数即为几何分布随机变量。参数p的合法区间为p ∈ (0, 1)在源码中由geom_gen._argcheck强制校验# scipy/stats/_discrete_distns.py def _argcheck(self, p): return (p 1) (p 0)即只接受0 p 1区间端点 0 被拒绝、1 被接受p1时必然首次即成功退化为退化分布。二、核心数学公式全解1. 概率质量函数PMF$$ p(k; p) (1-p)^{k-1} p, \quad k \geq 1 $$含义前k-1次全部失败概率(1-p)^{k-1}第k次成功概率p。源码实现为def _pmf(self, k, p): return np.power(1-p, k-1) * p def _logpmf(self, k, p): return special.xlog1py(k - 1, -p) log(p)其中对数概率使用了special.xlog1py即x·log(1y)的数值稳定实现避免1-p在p接近 1 时发生灾难性抵消保障logpmf的精度。2. 累积分布函数CDF$$ F(x; p) 1 - (1-p)^{\lfloor x \rfloor}, \quad x \geq 1 $$由于是离散分布CDF 对非整数参数x取下整。源码实现利用expm1与log1p保证小概率端数值稳定性def _cdf(self, x, p): k floor(x) return -expm1(log1p(-p)*k) def _logsf(self, x, p): k floor(x) return k*log1p(-p) def _sf(self, x, p): return np.exp(self._logsf(x, p))生存函数SF 1 − CDF同样采用log1pexp的稳定路线避免大k下直接计算1 - (1-p)^k的舍入误差。3. 分位数函数PPF / 逆 CDF$$ G(q; p) \left\lceil \frac{\log(1-q)}{\log(1-p)} \right\rceil $$对给定概率q ∈ [0, 1]返回满足F(k) ≥ q的最小整数k。源码在取整后额外做了一次 CDF 回查校正处理边界与浮点误差def _ppf(self, q, p): vals ceil(log1p(-q) / log1p(-p)) temp self._cdf(vals-1, p) return np.where((temp q) (vals 0), vals-1, vals)4. 矩与矩生成函数统计量公式备注均值 μ1/p成功概率越小期望试验次数越多方差 μ₂(1-p)/p²偏度 γ₁(2-p)/√(1-p)恒为正右偏峰度 γ₂(p²-6p6)/(1-p)超额峰度excess kurtosis矩生成函数 M(t)p / (e⁻ᵗ − (1-p))定义域需满足e⁻ᵗ 1-p矩在源码_stats中实现峰度系数用多项式求值np.polyval([1, -6, 6], p)计算def _stats(self, p): mu 1.0/p qr 1.0-p var qr / p / p g1 (2.0-p) / sqrt(qr) g2 np.polyval([1, -6, 6], p)/(1.0-p) return mu, var, g1, g2四个返回值依次对应mean、variance、skew、kurtosis超额峰度与上表完全一致。三、源码级实现剖析1. 类定义与分布实例化几何分布封装在 scipy/stats/_discrete_distns.py 的geom_gen类中继承自rv_discrete基类模块底部实例化geom geom_gen(a1, namegeom, longnameA geometric)参数a1声明了支撑集下界最小取值为 1即首次试验就成功的情形这与 CDF 公式中x ≥ 1的条件一一对应。支撑集上界默认取无穷因为理论上k可以任意大连续失败的次数没有上限。2. 形状参数声明_shape_info声明了形状参数p的定义域为开区间(0, 1)def _shape_info(self): return [_ShapeInfo(p, False, (0, 1), (True, True))]该信息用于通用参数校验、数组广播与自动生成文档保证调用geom.pmf(k, p)时p必须满足0 p ≤ 1。3. 随机数生成与 int64 边界处理_rvs直接调用 NumPy 的geometric采样并做了一处关键加固——将因溢出回绕成负数的采样值替换为int64最大值def _rvs(self, p, sizeNone, random_stateNone): res random_state.geometric(p, sizesize) # RandomState.geometric can wrap around to negative values; make behavior # consistent with Generator.geometric by replacing with maximum integer. max_int np.iinfo(res.dtype).max return np.where(res 0, max_int, res)这一点与geom_gen文档字符串中记录的边界行为呼应当p 10⁻¹⁷时观测值超过np.iinfo(np.int64).max的概率迅速上升当p 10⁻²⁰时几乎全部观测值都会超过该上限。由于输出 dtype 固定为int64这些值会被裁剪到最大值。实际使用时若非专门研究极端小概率场景建议保持p ≥ 10⁻¹⁷。4. 熵Entropy源码额外提供了闭式熵公式def _entropy(self, p): return -np.log(p) - np.log1p(-p) * (1.0-p) / p该式由几何分布熵的级数求和得出log1p的使用再次体现对小概率参数p → 0场景的数值稳健设计。四、实战用法示例1. 概率质量与累积概率import numpy as np from scipy import stats # 成功概率 0.3 的几何分布 p 0.3 geom stats.geom(p) # 首次成功恰好在第 4 次试验的概率 print(geom.pmf(4)) # 0.7**3 * 0.3 0.1029 # 在前 4 次试验内成功的概率CDF print(geom.cdf(4)) # 1 - 0.7**4 ≈ 0.7599 # 生存函数4 次试验仍未成功的概率 print(geom.sf(4)) # 0.7**4 0.2401 # 逆 CDF90% 概率必然成功所需的试验次数 print(geom.ppf(0.9)) # ceil(log(0.1)/log(0.7)) 7 # 描述性统计量 print(geom.mean()) # 1/0.3 ≈ 3.333 print(geom.var()) # 0.7/0.09 ≈ 7.778 print(geom.stats(momentsmvsk)) # (均值, 方差, 偏度, 峰度)2. 随机抽样# 生成 10000 个几何分布样本seed 固定以便复现 rvs geom.rvs(size10000, random_state42) print(rvs.min(), rvs.mean()) # 均值应接近 1/p ≈ 3.33 # 指定 p 的向量化调用不同 p 对应不同样本 ps np.array([0.1, 0.5, 0.9]) samples stats.geom.rvs(ps, size1000, random_state0)3. 与相关离散分布的对照stats.planck几何分布的从 0 计数变体geometric planck 1二者互为平移关系stats.nbinom负二项分布当失败次数参数n1时负二项分布退化为几何分布。几何分布可视为负二项分布在n1的特例stats.bernoulli单次试验的 0/1 结果是构成几何分布序列的基本试验单元。4. 对数域计算的推荐用法对于尾概率计算优先使用logpmf与logsf避免极小概率下溢# p 很小、k 很大时直接 pmf 可能下溢为 0 log_p stats.geom.logpmf(1000, 0.001) # ≈ -1.0005 print(np.exp(log_p)) # 精确恢复 ≈ 3.68e-2五、数值稳定性设计要点从源码可归纳出geom实现的三大数值稳健策略源码依据见 scipy/stats/_discrete_distns.pylog1p/expm1组合所有形如(1-p)^k的计算都改写为exp(k·log1p(-p))形式避免p接近 1 时1-p的有效数字损失对数域优先_logpmf、_logsf作为一等公民实现_sf由exp(_logsf)得出而非1 - _cdf规避大数相减的灾难性抵消分位数回查校正_ppf在向上取整后再次调用_cdf验证保证离散分位数单调性在浮点边界处不被破坏。历史版本曾修复geom.logpmf(1, 1)返回nan的问题应返回0.0相关记录见 0.15.0 版本发布说明本次源码中的_argcheck允许p1正是该修复的直接体现。六、应用场景小结几何分布广泛用于首次成功等待时间类问题可靠性工程设备连续无故障运行周期数、首次故障前的检查次数质量控制抽检流水线中首次发现次品所需的检验件数通信与随机接入ALOHA 类随机多址协议中节点首次成功发送所需的时隙数随机游走与排队论首次命中特定状态所需的步数近似。使用 scipy.stats.geom 时只需牢记三点参数p ∈ (0,1]是成功概率随机变量从 1 开始计数当p小于10⁻¹⁷时注意抽样结果的int64裁剪边界。其余统计推断、矩计算与向量化调用均可直接借助rv_discrete基类的完整方法族完成。【免费下载链接】scipySciPy library main repository项目地址: https://gitcode.com/gh_mirrors/sc/scipy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

WHM与cPanel权威指南:服务器管理员的高效运维实战

WHM与cPanel权威指南:服务器管理员的高效运维实战

1. WHM 的本质:服务器房东的总管理台1.1 先搞懂 WHM 和 cPanel 到底是啥关系很多人第一次接触 WHM,是在买虚拟主机或者 VPS 之后,看到服务商发来的邮件里写了两个地址:一个类似https://你的IP:2083,另一个类似https://…

2026/9/24 19:42:12 阅读更多 →
股票原理源码解析:面试官最爱问的5个底层逻辑

股票原理源码解析:面试官最爱问的5个底层逻辑

股票原理源码解析:面试官最爱问的5个底层逻辑 官方文档太厚,翻到想睡觉?别慌。我在大厂带过不少新人,发现大家卡在“股票原理”上,往往不是不懂K线,而是没看透背后的 源码解析…

2026/9/24 19:38:05 阅读更多 →
3分钟搞定大音响驱动完整示例,面试原理不再挂

3分钟搞定大音响驱动完整示例,面试原理不再挂

3分钟搞定大音响驱动完整示例,面试原理不再挂 面试被问“大音响底层原理”答不上来,那种尴尬感真的很难受。很多后端或嵌入式开发者,平时只调用现成的库,一问到声卡驱动、音频流处理或者硬件通信就懵圈。今天这篇教程,不讲虚的,直接上 完整示例…

2026/9/24 19:32:45 阅读更多 →

最新新闻

深度学习新闻分类推荐系统:从TextCNN到个性化推荐

深度学习新闻分类推荐系统:从TextCNN到个性化推荐

简介:这份基于深度学习的新闻分类推荐系统Python实现源码,是专为课程设计与期末大作业准备的高分项目,下载后无需修改即可运行,适用于需要快速交付完整课题的高校学生。系统涵盖新闻数据预处理、文本分类模型训练、推荐逻辑展示等…

2026/9/25 0:00:41 阅读更多 →
汽车电子底层软件开发:AUTOSAR与CAN总线实战解析

汽车电子底层软件开发:AUTOSAR与CAN总线实战解析

1. 这门“汽车电子底层软件开发就业课”到底在教什么?——不是写个LED闪烁就能上岗的很多人看到“汽车电子底层软件开发就业课”这个标题,第一反应是:不就是嵌入式C语言单片机CAN通信?刷几道LeetCode、调通一个STM32 CAN收发例程&…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
CVE-2025-27591深度解析:日志组件本地权限提升漏洞与防御

CVE-2025-27591深度解析:日志组件本地权限提升漏洞与防御

CVE-2025-27591 最近在安全圈里讨论度不低,核心是 Below 这个日志处理组件在权限控制上出了问题,低权限用户有机会利用日志文件、临时目录的处理流程,把自身权限抬升到管理员甚至系统级别。很多人一听到“利用脚本”就先想到怎么打&#xff0…

2026/9/24 23:59:40 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →