讲师中心 微信公众号
AI工具推荐 视频效率加速

超几何分布python代码实现

夏晨大大_7141

夏晨大大_7141

发布时间:2025-12-19 11:24:07

|

1007人浏览过

|

来源于php中文网

原创

超几何分布描述有限总体中不放回抽样时某类元素出现次数的概率分布,核心参数为总体大小M、成功类数量n、抽样数N及成功次数k;可用scipy.stats.hypergeom计算PMF或手动实现,并支持随机抽样模拟。

超几何分布python代码实现

超几何分布描述的是:从有限总体中不放回地抽取若干样本时,其中某一类元素出现的次数的概率分布。Python 中可以用 scipy.stats.hypergeom 直接计算,也可以手动实现概率质量函数(PMF)。

用 scipy 实现超几何分布

最常用、最稳妥的方式是调用 SciPy 提供的 hypergeom 类,它已优化并支持批量计算。

参数说明:

  • M:总体大小(比如罐子里总共有多少个球)
  • n:总体中“成功类”元素个数(比如红球有多少个)
  • N:抽取样本数(比如摸出几个球)
  • k:我们关心“抽中多少个红球”(即成功次数)

示例代码:

立即学习“Python免费学习笔记(深入)”;

from scipy.stats import hypergeom
import numpy as np
<h1>总体 M=50,其中 n=10 个是目标类(如次品),抽 N=5 个</h1><p>M, n, N = 50, 10, 5</p><h1>计算 k=0,1,2,3,4,5 时的概率</h1><p>k = np.arange(0, N + 1)
pmf_values = hypergeom.pmf(k, M, n, N)</p><p>for k_val, prob in zip(k, pmf_values):
print(f"P(X = {k_val}) = {prob:.6f}")</p>

手动实现 PMF(加深理解)

超几何分布的 PMF 公式为:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载

P(X = k) = C(n, k) × C(M − n, N − k) / C(M, N)

其中 C(a,b) 是组合数,即 “a 选 b”。注意:只有当 max(0, N − (M − n)) ≤ k ≤ min(n, N) 时概率非零。

手动实现(使用 math.comb,Python 3.8+):

import math
<p>def hypergeom_pmf(k, M, n, N):
if k < 0 or k > n or k > N or N - k > M - n:
return 0.0
numerator = math.comb(n, k) * math.comb(M - n, N - k)
denominator = math.comb(M, N)
return numerator / denominator if denominator != 0 else 0.0</p><h1>示例:同上参数</h1><p>M, n, N = 50, 10, 5
for k in range(N + 1):
print(f"P(X = {k}) = {hypergeom_pmf(k, M, n, N):.6f}")</p>

生成随机样本(模拟抽样过程)

除了计算概率,你可能还想模拟多次不放回抽样结果:

import numpy as np
<p>def hypergeom_rvs(M, n, N, size=1):</p><h1>创建总体:n 个 1(成功),M-n 个 0(失败)</h1><pre class='brush:python;toolbar:false;'>population = [1] * n + [0] * (M - n)
samples = []
for _ in range(size):
    # 不放回随机抽 N 个
    draw = np.random.choice(population, size=N, replace=False)
    samples.append(draw.sum())  # 统计抽中多少个 1
return np.array(samples)

模拟抽 1000 次,每次抽 5 个

results = hypergeom_rvs(M=50, n=10, N=5, size=1000) print("模拟频次统计:", np.bincount(results, minlength=6))

注意事项与常见错误

使用时容易忽略的细节:

  • 确保 k 的取值范围合法:不能超过 n 或 N,也不能导致另一类不够抽(如 N−k > M−n)
  • SciPy 的 hypergeom 默认对非法 k 返回 0,但手动实现需自己判断边界
  • 大数组合数(如 C(10000, 500))可能导致整数溢出或浮点精度问题,此时建议用对数计算或 scipy 的 logpmf
  • 若需高精度或超大参数,可改用 scipy.stats.hypergeom.logpmf 避免下溢

基本上就这些。scipy 方案适合绝大多数场景;手动实现有助于理解原理,也便于嵌入无外部依赖的轻量环境。

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3100

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

0

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

0

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

120

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

60

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

60

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn