当前位置: 首页 > article >正文

从“杯子放球”到“射击命中”:用Python模拟帮你彻底搞懂离散随机变量

从“杯子放球”到“射击命中”用Python模拟帮你彻底搞懂离散随机变量概率论中的离散随机变量概念常常让初学者感到抽象难懂。传统的数学推导虽然严谨但缺乏直观性。本文将带你用Python代码亲手模拟几个经典概率问题通过可视化手段让这些概念变得触手可及。1. 环境准备与基础概念在开始之前我们需要配置Python环境并安装必要的库。推荐使用Jupyter Notebook进行交互式编程它能实时显示代码运行结果和可视化图表。# 安装必要库 !pip install numpy matplotlib离散随机变量的核心特征是它只能取有限或可数个值。比如掷骰子的结果1到6抛硬币的结果正面或反面射击命中次数0到n关键区别与连续随机变量不同离散随机变量的概率分布可以用概率质量函数(PMF)完整描述。2. 经典问题模拟杯子放球实验这个经典问题描述为将n个球随机放入N个杯子中每个杯子被选中的概率相同。我们关心的是特定杯子中球的数量。2.1 问题建模与代码实现import numpy as np import matplotlib.pyplot as plt def cup_balls_experiment(n_balls10, n_cups5, n_trials10000): 模拟杯子放球实验 :param n_balls: 球的数量 :param n_cups: 杯子的数量 :param n_trials: 实验次数 :return: 特定杯子中球数的概率分布 results np.zeros(n_trials) for i in range(n_trials): # 随机分配球到杯子 allocations np.random.randint(0, n_cups, sizen_balls) # 统计第一个杯子中的球数 results[i] np.sum(allocations 0) # 计算概率分布 unique, counts np.unique(results, return_countsTrue) probabilities counts / n_trials return unique, probabilities2.2 结果可视化与分析运行上述代码并绘制结果values, probs cup_balls_experiment(n_balls10, n_cups5) plt.bar(values, probs) plt.xlabel(Number of balls in the first cup) plt.ylabel(Probability) plt.title(Probability Distribution of Balls in a Cup) plt.show()理论分析这实际上是一个二项分布问题每个球独立地以概率1/N落入特定杯子。当N5时理论概率应为$$ P(k) C_{10}^k \left(\frac{1}{5}\right)^k \left(\frac{4}{5}\right)^{10-k} $$3. 伯努利试验与射击命中问题射击命中问题是典型的伯努利试验每次射击独立命中概率为p未命中概率为1-p。n次射击中命中次数k服从二项分布。3.1 模拟实现def binomial_simulation(n10, p0.3, trials10000): 模拟二项分布 :param n: 试验次数 :param p: 成功概率 :param trials: 模拟次数 :return: 成功次数的概率分布 results np.random.binomial(n, p, trials) unique, counts np.unique(results, return_countsTrue) probabilities counts / trials return unique, probabilities3.2 不同参数下的对比我们可以比较不同命中概率p对分布的影响p值分布形状特征期望值方差0.1右偏集中在0附近10.90.5对称分布52.50.9左偏集中在n附近90.9# 比较不同p值的分布 p_values [0.1, 0.5, 0.9] plt.figure(figsize(12,4)) for i, p in enumerate(p_values): plt.subplot(1,3,i1) values, probs binomial_simulation(pp) plt.bar(values, probs) plt.title(fp{p}) plt.xlabel(Number of successes) plt.ylabel(Probability) plt.tight_layout() plt.show()4. 泊松分布稀有事件建模泊松分布常用于描述单位时间内稀有事件发生的次数。例如网站每分钟的访问量放射性物质单位时间的衰变次数4.1 泊松过程模拟def poisson_process(rate3, time1, trials10000): 模拟泊松过程 :param rate: 事件发生率 :param time: 观察时间 :param trials: 模拟次数 :return: 事件次数的概率分布 results np.random.poisson(rate*time, trials) unique, counts np.unique(results, return_countsTrue) probabilities counts / trials return unique, probabilities4.2 泊松与二项分布的关系当n很大而p很小时二项分布近似于泊松分布。我们可以通过模拟验证这一点# 比较二项分布和泊松分布 n, p 1000, 0.003 # λ np 3 binomial_values, binomial_probs binomial_simulation(nn, pp) poisson_values, poisson_probs poisson_process(raten*p) plt.bar(binomial_values-0.1, binomial_probs, width0.2, labelBinomial) plt.bar(poisson_values0.1, poisson_probs, width0.2, labelPoisson) plt.legend() plt.xlabel(Number of events) plt.ylabel(Probability) plt.title(Comparison of Binomial and Poisson Distributions) plt.show()5. 几何分布等待首次成功几何分布描述了在独立伯努利试验中首次成功所需的试验次数。例如射击直到首次命中打电话直到首次接通5.1 模拟实现def geometric_simulation(p0.2, trials10000): 模拟几何分布 :param p: 每次试验成功概率 :param trials: 模拟次数 :return: 首次成功所需试验次数的概率分布 results [] for _ in range(trials): count 1 while np.random.random() p: count 1 results.append(count) unique, counts np.unique(results, return_countsTrue) probabilities counts / trials return unique, probabilities5.2 无记忆性验证几何分布的一个重要特性是无记忆性已经失败了k次后首次成功还需要等待的次数的分布与原始分布相同我们可以用代码验证这一特性# 验证无记忆性 p 0.1 values, probs geometric_simulation(pp) # 条件概率已知前5次都失败首次成功在第6次及以后的分布 conditional_results [] for _ in range(10000): count 1 # 确保前5次都失败 while True: trials [] for _ in range(5): trials.append(np.random.random() p) if all(trials): break # 从第6次开始记录首次成功 count 6 while np.random.random() p: count 1 conditional_results.append(count-5) # 额外的等待次数 # 比较原始分布和条件分布 cond_unique, cond_counts np.unique(conditional_results, return_countsTrue) cond_probs cond_counts / sum(cond_counts) plt.bar(values, probs, alpha0.5, labelOriginal) plt.bar(cond_unique, cond_probs, alpha0.5, labelConditional) plt.legend() plt.xlabel(Additional waiting time) plt.ylabel(Probability) plt.title(Memoryless Property Verification) plt.show()6. 负二项分布多次成功的等待时间负二项分布是几何分布的推广描述了获得r次成功所需的试验次数。6.1 模拟实现def negative_binomial_simulation(r3, p0.2, trials10000): 模拟负二项分布 :param r: 需要的成功次数 :param p: 每次试验成功概率 :param trials: 模拟次数 :return: 达到r次成功所需试验次数的概率分布 results [] for _ in range(trials): successes 0 count 0 while successes r: count 1 if np.random.random() p: successes 1 results.append(count) unique, counts np.unique(results, return_countsTrue) probabilities counts / trials return unique, probabilities6.2 与几何分布的关系当r1时负二项分布退化为几何分布。我们可以验证这一点# 比较r1的负二项分布和几何分布 nb_values, nb_probs negative_binomial_simulation(r1, p0.2) geo_values, geo_probs geometric_simulation(p0.2) plt.bar(nb_values-0.1, nb_probs, width0.2, labelNegative Binomial (r1)) plt.bar(geo_values0.1, geo_probs, width0.2, labelGeometric) plt.legend() plt.xlabel(Number of trials until first success) plt.ylabel(Probability) plt.title(Negative Binomial vs Geometric (r1)) plt.show()7. 超几何分布不放回抽样超几何分布描述了在不放回抽样中特定类别的物品被抽中的次数。例如从包含5个红球和15个黑球的袋子中抽取10个球红球的数量质量控制中的缺陷品抽样检查7.1 模拟实现def hypergeometric_simulation(N20, K5, n10, trials10000): 模拟超几何分布 :param N: 总体大小 :param K: 成功物品数量 :param n: 抽样数量 :param trials: 模拟次数 :return: 样本中成功物品数量的概率分布 population np.array([1]*K [0]*(N-K)) results [] for _ in range(trials): sample np.random.choice(population, sizen, replaceFalse) results.append(np.sum(sample)) unique, counts np.unique(results, return_countsTrue) probabilities counts / trials return unique, probabilities7.2 与二项分布的比较当N很大而n相对较小时超几何分布近似于二项分布。我们可以观察这一现象# 比较超几何分布和二项分布 N, K, n 1000, 200, 50 # p K/N 0.2 hyp_values, hyp_probs hypergeometric_simulation(NN, KK, nn) bin_values, bin_probs binomial_simulation(nn, pK/N) plt.bar(hyp_values-0.1, hyp_probs, width0.2, labelHypergeometric) plt.bar(bin_values0.1, bin_probs, width0.2, labelBinomial) plt.legend() plt.xlabel(Number of successes in sample) plt.ylabel(Probability) plt.title(Hypergeometric vs Binomial (Large N)) plt.show()8. 实际应用案例质量控制模拟让我们将这些分布应用于一个实际的质量控制场景。假设一个工厂生产灯泡历史数据显示有5%的缺陷率。质检部门每天随机抽取50个灯泡进行测试。8.1 问题建模我们可以用二项分布建模每天的缺陷品数量def quality_control_simulation(defect_rate0.05, sample_size50, days365): 模拟一年的质量控制过程 :param defect_rate: 缺陷率 :param sample_size: 每日抽样数量 :param days: 模拟天数 :return: 每日缺陷品数量 daily_defects np.random.binomial(sample_size, defect_rate, days) return daily_defects8.2 异常检测我们可以计算均值和标准差并设置3σ控制限defects quality_control_simulation() mean np.mean(defects) std np.std(defects) plt.plot(defects, b-, labelDaily defects) plt.axhline(mean, colorg, linestyle--, labelMean) plt.axhline(mean 3*std, colorr, linestyle:, labelUpper control limit) plt.axhline(mean - 3*std, colorr, linestyle:, labelLower control limit) plt.xlabel(Day) plt.ylabel(Number of defective items) plt.title(Quality Control Chart) plt.legend() plt.show()实际应用建议当数据点超出控制限时可能表明生产过程出现了异常波动需要调查原因。

相关文章:

从“杯子放球”到“射击命中”:用Python模拟帮你彻底搞懂离散随机变量

从“杯子放球”到“射击命中”:用Python模拟帮你彻底搞懂离散随机变量 概率论中的离散随机变量概念常常让初学者感到抽象难懂。传统的数学推导虽然严谨,但缺乏直观性。本文将带你用Python代码亲手模拟几个经典概率问题,通过可视化手段让这些概…...

Beyond Compare 5密钥生成终极指南:3分钟完成软件激活的完整解决方案

Beyond Compare 5密钥生成终极指南:3分钟完成软件激活的完整解决方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否正在为Beyond Compare 5的"评估模式错误"而烦恼…...

DS4Windows终极指南:让PS4手柄在PC上重获新生

DS4Windows终极指南:让PS4手柄在PC上重获新生 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 你是否有一台闲置的PS4手柄,却发现在PC上玩游戏时兼容性不佳&#xf…...

长鑫存储逆袭:从近10年亏损超366亿到盈利超预期,能否成“中国海力士”?

长鑫存储逆袭:从巨亏到盈利超预期,能否成为“中国海力士”?“韩国巨头布局存储,中国巨头热衷于外卖。”这一波存储涨价潮,很多人用戏谑的方式来表达对中国几家互联网公司的“恨铁不成钢”。但长鑫存储却凭借一份极度亮…...

如何永久保存你的数字记忆:WeChatMsg终极免费指南与AI相册创新

如何永久保存你的数字记忆:WeChatMsg终极免费指南与AI相册创新 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

在树莓派等arm设备上观测大模型API调用的延迟与稳定性表现

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在树莓派等ARM设备上观测大模型API调用的延迟与稳定性表现 在边缘计算或资源受限的环境中,例如使用树莓派等基于ARM架构…...

终极密码恢复指南:如何使用ArchivePasswordTestTool轻松破解加密压缩包

终极密码恢复指南:如何使用ArchivePasswordTestTool轻松破解加密压缩包 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾…...

谷歌 I/O 2026 炸场:Gemini 3.5 Flash 震撼发布!反超 3.1 Pro,开启“全自动 Agent 狂飙”时代

在刚刚开幕的 Google I/O 2026 开发者大会上,谷歌正式扔下了一颗重磅炸弹:发布全新 Gemini 3.5 系列 的首款旗舰轻量模型 —— Gemini 3.5 Flash。 这次的发布极为硬核,谷歌彻底打破了我们对 “Flash 是低配版/轻量版” 的固有认知。根据 Dee…...

告别伪影和色偏!用AnimeGANv3把照片一键变成宫崎骏动画风(附GUI工具下载)

用AnimeGANv3打造宫崎骏动画风照片:零基础也能上手的终极指南 你是否也曾被宫崎骏动画中那些唯美的场景所打动?蓝天白云下飘动的发丝、夕阳映照中闪烁的波光,这些充满魔力的画面如今可以通过AnimeGANv3一键实现。不同于市面上那些会产生色偏和…...

比特币钱包密码恢复神器:如何用btcrecover找回遗忘的数字资产密码

比特币钱包密码恢复神器:如何用btcrecover找回遗忘的数字资产密码 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance i…...

SAP ABAP SM30表维护:手把手教你实现‘运费类型’重复描述校验(附完整代码与避坑指南)

SAP ABAP SM30表维护实战:运费类型唯一性校验的深度解析 在物流管理系统中,运费类型的定义往往需要遵循严格的业务规则。一个常见的需求是确保"运输类型运费代码"与"运费描述"的组合具有唯一性,避免因描述重复导致的操作…...

机器人仿真终极指南:使用WPR系列从零构建ROS虚拟测试环境 [特殊字符]

机器人仿真终极指南:使用WPR系列从零构建ROS虚拟测试环境 🚀 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation 在机器人开发领域,硬件成本高昂、测试周期漫长是每个开发者面临的现实挑战…...

3步解锁Godot游戏黑盒:PCK资源解包实战指南

3步解锁Godot游戏黑盒:PCK资源解包实战指南 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 还在为Godot游戏的神秘资源包而困惑吗?面对那些看似不可访问的.pck文件&#xff0…...

抖音批量下载器终极指南:免费高效的视频采集解决方案

抖音批量下载器终极指南:免费高效的视频采集解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

终极指南:3步实现Switch手柄在Windows PC上的完美XInput兼容

终极指南:3步实现Switch手柄在Windows PC上的完美XInput兼容 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcod…...

手把手图解:用Wireshark抓个包,带你‘看见’一次IMS注册和SIP会话的全过程

手把手图解:用Wireshark抓个包,带你‘看见’一次IMS注册和SIP会话的全过程 通信工程师的日常工作中,最令人着迷的莫过于将抽象的网络协议转化为可视化的数据流。当终端设备向IMS核心网发起注册并建立语音会话时,背后究竟发生了什么…...

如何快速实现碧蓝航线全自动托管:智能脚本Alas终极指南

如何快速实现碧蓝航线全自动托管:智能脚本Alas终极指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧…...

北邮数电实验:用Verilog在FPGA上实现4位加法器,从全加器到数码管显示(附完整代码与管脚绑定)

北邮数电实验:从全加器到4位加法器的FPGA实现全流程解析 第一次接触FPGA上的数字电路实验时,看着开发板上密密麻麻的管脚和闪烁的LED,我完全不知道从何入手。直到亲手实现了一个4位加法器,才真正理解了数字系统设计的精髓——用硬…...

3步魔法公式:用novideo_srgb为NVIDIA显卡开启色彩真实之门

3步魔法公式:用novideo_srgb为NVIDIA显卡开启色彩真实之门 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirrors/no/novideo_srgb …...

ODS怎么转PDF?5种转换方法对比与2026实测工具推荐

当你拿到OpenDocument电子表格(ODS格式)文件,却需要分享成PDF格式时,转换往往成为一个必要步骤。ODS是LibreOffice等开源办公套件的标准格式,具有高度兼容性和数据完整性,但在跨平台分享和打印时&#xff0…...

ComfyUI Manager 架构设计与性能优化:从插件管理到系统集成的完整解决方案

ComfyUI Manager 架构设计与性能优化:从插件管理到系统集成的完整解决方案 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and e…...

从Cityscapes到遥感图像:用MMSegmentation v1.0.0搞定不同领域语义分割数据集的完整配置流程

跨领域语义分割实战:MMSegmentation多场景数据集配置全解析 当计算机视觉工程师需要将语义分割技术从自动驾驶领域迁移到遥感图像分析时,最常遇到的障碍不是模型架构的选择,而是数据集的适配难题。不同领域的图像在分辨率、类别分布、标注格式…...

PDF怎么转Word不变形?2026保留原排版方法与软件推荐

PDF转Word时遇到排版错乱是许多办公人士的共同困扰。无论是报告、合同还是设计稿,排版混乱往往意味着需要重新手工调整,浪费大量时间。本文整合了2026年最实用的PDF转Word保留原排版方法,以及各类软件工具的详细对比,帮助你快速找…...

InfluxDB Studio:如何用一款工具解决时间序列数据库管理的三大痛点

InfluxDB Studio:如何用一款工具解决时间序列数据库管理的三大痛点 【免费下载链接】InfluxDBStudio InfluxDB Studio is a UI management tool for the InfluxDB time series database. 项目地址: https://gitcode.com/gh_mirrors/in/InfluxDBStudio 时间序…...

从绿光到深紫外:手把手教你选对BBO、LBO、CLBO晶体,搞定激光倍频实验

从绿光到深紫外:非线性晶体选型与倍频实验实战指南 当实验室的1064nm激光器发出那束熟悉的近红外光时,许多研究者脑海中会立刻浮现两个问题:如何高效获得532nm的翠绿光束?又该如何进一步压缩波长至266nm的深紫外区域?…...

告别仿真卡顿!Synopsys AXI VIP Memory模型实战:从地址配置到后门读写(附避坑指南)

告别仿真卡顿!Synopsys AXI VIP Memory模型实战:从地址配置到后门读写(附避坑指南) 在复杂SoC验证中,仿真速度直接决定了项目周期。当AXI总线上的数据吞吐量达到GB/s级别时,传统的前门读写操作会让仿真器陷…...

关联查询,左连接,inner join笔记,BNL,NLJ

文章目录left join的最大值和最小值3个表的inner join关联查询时的is_del处理cross join(full join)NLJ 性能高BNL 性能低blj会导致什么问题?left join的最大值和最小值 假设左表m条,右表n条 最小值是m: 当一条也匹配不到右表时,或者右表中…...

从过采样到Σ-Δ调制:采样技术如何成为提升信噪比的秘密武器

1. 项目概述:从“听不清”到“听得清”的底层博弈 在信号处理、音频工程、通信系统乃至生物医学检测的日常工作中,我们总会遇到一个共同的“敌人”——噪声。无论你是在调试一段录音,分析一组传感器数据,还是试图从遥远的深空接收…...

C++ `reinterpret_cast`

1. C 类型转换基础 C中的四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_castreinterpret_cast 的定义与目的 2. 使用 reinterpret_cast 语法与基本示例适用场景与不适用的场景 3. 转换指针类型 从void* 到其他类型指针将一个指针类型转换为另一…...

Hitboxer SOCD Cleaner:键盘输入仲裁系统的底层实现与技术架构分析

Hitboxer SOCD Cleaner:键盘输入仲裁系统的底层实现与技术架构分析 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏领域,键盘输入精度直接影响玩家操作表现。传统键盘在处理同…...