numpy学习笔记16: 1000 次独立随机游走实验(绘制其分布直方图,同时叠加理论正态分布曲线)

numpy学习笔记16: 1000 次独立随机游走实验(绘制其分布直方图,同时叠加理论正态分布曲线)

以下是这段代码(全部代码在最后)的详细分步解释,结合统计学原理和可视化技巧:


1. 代码功能概述

这段代码通过 1000 次独立随机游走实验,模拟粒子在直线上的运动轨迹,计算每次实验的最终位置,并绘制其分布直方图。同时叠加理论正态分布曲线,验证中心极限定理的应用。


2. 分步代码解析

(1) 参数设置
mu = 0              # 理论均值(对称随机游走的期望位置)
n_steps = 1000      # 每次实验的步数
sigma = np.sqrt(n_steps)  # 理论标准差 ≈ 31.62
n_simulations = 1000  # 实验次数
  • mu=0:对称随机游走(左/右概率各 50%)的期望最终位置为 0。

  • sigma 计算

(2) 模拟随机游走
final_positions = [np.sum(np.random.choice([-1, 1], n_steps)) for _ in range(n_simulations)
]
  • 内部逻辑

    1. np.random.choice([-1,1], n_steps):生成包含 1000 个元素的数组,元素随机为 -1 或 1

    2. np.sum(...):计算该次实验的最终位置(所有步长的代数和)。

    3. 列表推导式:重复 1000 次实验,生成包含 1000 个最终位置的列表。

  • 示例结果

    final_positions = [12, -5, 3, ..., -18]  # 1000 个整数
(3) 绘制直方图(模拟数据分布)
plt.hist(final_positions, bins=30, density=True, alpha=0.7, label='Simulated Data')
  • 参数解析

    • bins=30:将数据范围划分为 30 个区间(柱状图的柱子数量)。

    • density=True:将纵轴从频数转换为 概率密度(直方图总面积为 1)。

    • alpha=0.7:设置柱子透明度为 70%,便于与理论曲线叠加对比。

    • label='Simulated Data':图例标签,标注为模拟数据。


(4) 生成理论正态分布曲线
from scipy.stats import normx = np.linspace(mu - 4*sigma, mu + 4*sigma, 100)  # 生成横坐标范围
pdf = norm.pdf(x, mu, sigma)  # 计算理论概率密度
plt.plot(x, pdf, 'r-', linewidth=2, label='Theoretical PDF')  # 绘制红色曲线
  • np.linspace:生成从 μ−4σμ−4σ 到 μ+4σμ+4σ 的等间隔数组,覆盖 99.99% 的数据范围。

  • norm.pdf:计算理论正态分布概率密度:

(5) 图表美化与显示
plt.title("Random Walk Final Position Distribution")  # 标题
plt.xlabel("Final Position")  # 横轴标签
plt.ylabel("Probability Density")  # 纵轴标签
plt.legend()  # 显示图例
plt.show()  # 渲染图像
  • 输出效果

    • 蓝色直方图:模拟数据的分布。

    • 红色曲线:理论正态分布 N(0,31.622)N(0,31.622)。


3. 统计学原理验证

(1) 中心极限定理(CLT)
  • 核心结论:独立同分布随机变量的和趋近于正态分布。

  • 在此代码中的应用

    • 尽管单步位移是离散的(-1 或 1),但 1000 步的总位移近似服从正态分布 N(0,1000)N(0,1000)。

(2) 参数匹配验证
  • 理论均值:μ=0μ=0

4. 关键参数调整建议

(1) 增加模拟次数
n_simulations = 10_000  # 提高统计显著性,直方图更平滑
(2) 非对称步长概率
# 向右概率 60%,向左概率 40%
steps = np.random.choice([-1, 1], size=n_steps, p=[0.4, 0.6])
mu_theory = n_steps * ( (-1)*0.4 + 1*0.6 )  # 理论均值 = 200 (当 n_steps=1000)
(3) 可变步长
# 步长为 -0.5 或 2,改变均值和方差
steps = np.random.choice([-0.5, 2], size=n_steps)

5. 应用场景

  1. 金融建模:模拟股票价格或汇率的随机波动。

  2. 物理模拟:研究微粒在液体中的扩散(布朗运动)。

  3. 算法测试:评估蒙特卡洛方法的收敛性。


6. 完整代码输出示例

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 模拟1000次随机游走(增强统计显著性)
mu = 0  # 理论均值(对称随机游走的期望位置)
n_steps = 1000   # 每次实验的步数
n_simulations = 1000  # 实验次数
final_positions = [np.sum(np.random.choice([-1, 1], n_steps))for _ in range(n_simulations)
]# 绘制直方图
plt.hist(final_positions, bins=30, density=True, alpha=0.7, label='Simulated Data')from scipy.stats import norm
sigma = np.sqrt(n_steps)  # sqrt(1000) ≈ 31.62  # 理论标准差 ≈ 31.62
# 绘制理论曲线
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 100)   # 生成横坐标范围
pdf = norm.pdf(x, mu, sigma)   # 计算理论概率密度
plt.plot(x, pdf, 'r-', linewidth=2, label='Theoretical PDF')  # 绘制红色曲线plt.title("Random Walk Final Position Distribution") # 标题
plt.xlabel("Final Position")  # 横轴标签
plt.ylabel("Probability Density")  # 纵轴标签
plt.legend()  # 显示图例
plt.show()  # 渲染图像

总结

  • 代码逻辑:通过多次独立实验生成最终位置分布,对比理论正态曲线。

  • 核心验证:中心极限定理在随机游走中的体现。

  • 扩展性:可调整步长、概率、步数等参数探索不同场景。

此代码不仅展示了 NumPy 和 Matplotlib 的高效应用,还通过可视化直观验证了统计学中的重要理论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37551.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 项目06-计算程序运行时间

实现需求 记录程序运行时间,当程序退出后,保存程序运行时间,等下次程序再次启动时,继续记录运行时间 运行环境 Visual Studio 2022 知识点 TimeSpan 表示时间间隔。两个日期之间的差异的 TimeSpan 对象 TimeSpan P_TimeSpa…

KNN算法

一、KNN算法介绍 KNN 算法,也称 k邻近算法,是 有监督学习 中的 分类算法 。它可以用于分类或回归问题,但它通常用作分类算法。 二、KNN算法流程 1.计算已知类别数据集中的点与当前点的距离 2.按照距离增次序排序 3.选取与当前点距离最小…

星越L_可调悬挂使用讲解

目录 1.可变阻尼设置 1.可变阻尼设置

G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门

万事开源先修 Git。Git 是当下主流的分布式版本控制工具,在软件开发、文档管理等方面用处极大。它能自动记录文件改动,简化合并流程,还特别适合多人协作开发。学会 Git,就相当于掌握了一把通往开源世界的钥匙,以后参与…

html5炫酷3D立体文字效果实现详解

炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…

《白帽子讲 Web 安全》之开发语言安全深度解读

目录 引言 1.PHP 安全 1.1变量覆盖 1.2空字节问题 1.3弱类型 1.4反序列化 1.5安全配置 2Java 安全 2.1Security Manager 2.2反射 2.3反序列化 3Python 安全 3.1反序列化 3.2代码保护 4.JavaScript 安全 4.1第三方 JavaScript 资源 4.2JavaScript 框架 5.Node.…

django设置admin的排列顺序,耗3小时【躲坑指南】

django 项目中,这个数据栏目的显示排列顺序我希望更贴近业务 比如要让【商品货品信息】中的9个数据表根据人为规定来进行排序 结果:工程量很大。 能够实现人为的自定义排序 最简单的设置就是给模型添加号数标记 主应用中创建admin–设置了其中一个应用…

macOS使用brew切换Python版本【超详细图解】

目录 一、更新Homebrew仓库 二、安装pyenv 三、将pyenv添加到bash_profile文件中 四、使.bash_profile文件的更改生效 五、安装需要的Python版本 六、设置全局使用的Python版本 七、检查Python版本是否切换成功 pyenv常用命令 一、更新Homebrew仓库 brew update 这个…

【深度学习新浪潮】AI ISP技术与手机厂商演进历史

本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…

如何让节卡机器人精准对点?

如何让节卡机器人精准对点? JAKA Zu 软件主界面主要由功能栏、开关栏、菜单栏构成。 菜单栏:控制柜管理,机器人管理与软件管理组成。主要功能为对控制柜关机、APP 设置、机器人本体设 置、控制柜设置、连接机器人和机器人显示等功能。 开关…

QAI AppBuilder 快速上手(7):目标检测应用实例

YOLOv8_det是YOLO 系列目标检测模型,专为高效、准确地检测图像中的物体而设计。该模型通过引入新的功能和改进点,如因式分解卷积(factorized convolutions)和批量归一化(batch normalization),在…

c#难点整理

1.何为托管代码,何为非托管代码 托管代码就是.net框架下的代码 非托管代码,就是非.net框架下的代码 2.委托的关键知识点 将方法作为参数进行传递 3.多维数组 4.锯齿数组 5.多播委托的使用 6.is运算符 相当于逻辑运算符是 7.as 起到转换的作用 8.可…

二次向用户申请授权

HarmonyOS 5.0.3(15) 版本的配套文档,该版本API能力级别为API 15 Release 文章目录 当应用通过requestPermissionsFromUser()拉起弹框请求用户授权时,用户拒绝授权。应用将无法再次通过requestPermissionsFromUser()拉起弹框,需要用户在系统应…

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南,你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…

Chapter 8 Charge Pump

Chapter 8 Charge Pump 8.1 Introduction 电荷泵就是capacitive DC–DC converters, 一般把小功率bias generation叫做电荷泵, 传输大功率的称为switched-capacitor DC–DC converters. 但其实两者都是通过电容网络的charge redistribution, 来实现电压的倍增或者倍降. 8.1.…

计算机网络——通信基础和传输介质

物理层任务:实现相邻节点之间比特(0或1)的传输 到了数据链路层之后,它会以帧为单位,把若干个比特交给物理层,物理层需要把这些比特信息转化成信号,在物理传输媒体上进行传输 通信基础基本概念 信…

【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?

文章目录 ⭐前言⭐一、架构设计的本质差异🌟1、代码与数据结构的对比🌟2、技术栈的灵活性 ⭐二、开发与维护的成本博弈🌟1、开发效率的阶段性差异🌟2、维护成本的隐形陷阱 ⭐三、部署与扩展的实战策略🌟1、部署模式的本…

Java-SpringBootWeb入门、Spring官方脚手架连接不上解决方法

一. Spring 官网:Spring | Home Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能(Spring全家桶) Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。 二. Spring Boot入…

springboot整合redis

创建springboot整合redis工程: 一、springboot整合redis步骤 首先我们要知道什么是redis: 三步骤完成springboot对redis数据库的整合: 1、导入springboot整合redis坐标(上面勾选的那个就是) 2、在yml配置文件中配置re…

图解AUTOSAR_CP_EEPROM_Abstraction

AUTOSAR EEPROM抽象模块详细说明 基于AUTOSAR标准的EEPROM抽象层技术解析 目录 1. 概述 1.1 核心功能1.2 模块地位2. 架构概览 2.1 架构层次2.2 模块交互3. 配置结构 3.1 主要配置容器3.2 关键配置参数4. 状态管理 4.1 基本状态4.2 状态转换5. 接口设计 5.1 主要接口分类5.2 接…