numpy学习笔记14:模拟随机游走过程(一次实验)
创作时间:
作者:
@小白创作中心
numpy学习笔记14:模拟随机游走过程(一次实验)
引用
CSDN
1.
https://blog.csdn.net/fen_fen/article/details/146375615
numpy学习笔记14:模拟随机游走过程(一次实验)
随机游走是一个对象在离散时间步中的随机移动,每次移动的方向和步长由概率决定。在用户提供的代码中,步长数组steps的每个元素是-1或1,代表向左或向右移动一步。np.random.choice的作用就是生成这样的随机步长序列。
随机游走是一种数学统计模型,其中的每一步方向和大小都是随机的。下面使用 NumPy 模拟一维和二维的随机游走过程:
1.代码示例
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def simulate_1d_random_walk(num_steps):
"""
模拟一维随机游走
:param num_steps: 游走的步数
:return: 一维随机游走的位置数组
"""
steps = np.random.choice([-1, 1], size=num_steps)
positions = np.cumsum(steps)
return positions
def simulate_2d_random_walk(num_steps):
"""
模拟二维随机游走
:param num_steps: 游走的步数
:return: 二维随机游走的 x 和 y 坐标数组
"""
steps_x = np.random.choice([-1, 1], size=num_steps)
steps_y = np.random.choice([-1, 1], size=num_steps)
positions_x = np.cumsum(steps_x)
positions_y = np.cumsum(steps_y)
return positions_x, positions_y
# 模拟一维随机游走
num_steps_1d = 1000
positions_1d = simulate_1d_random_walk(num_steps_1d)
# 绘制一维随机游走轨迹
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(positions_1d)
plt.title('一维随机游走')
plt.xlabel('步数')
plt.ylabel('位置')
# 模拟二维随机游走
num_steps_2d = 1000
positions_x, positions_y = simulate_2d_random_walk(num_steps_2d)
# 绘制二维随机游走轨迹
plt.subplot(1, 2, 2)
plt.plot(positions_x, positions_y)
plt.title('二维随机游走')
plt.xlabel('X 位置')
plt.ylabel('Y 位置')
plt.tight_layout()
plt.show()
- simulate_1d_random_walk函数:该函数通过
np.random.choice从[-1, 1]中随机选择num_steps个步长,然后使用np.cumsum计算累积和,得到一维随机游走的位置数组。 - simulate_2d_random_walk函数:分别为 x 和 y 方向生成随机步长,再分别计算它们的累积和,得到二维随机游走的 x 和 y 坐标数组。
- 可视化部分:使用
matplotlib绘制一维和二维随机游走的轨迹图。
2. 分步解释
(1) 生成随机步长
steps = np.random.choice([-1, 1], size=1000)
- 功能:生成包含 1000 个元素的数组,每个元素随机为-1(向左移动)或1(向右移动)。
- 概率:默认均匀分布,即-1和1出现的概率均为 50%。
(2) 计算累积位移
positions = np.cumsum(steps)
- 功能:通过
np.cumsum()对步长数组逐步累加,生成随时间变化的位置序列
(3) 可视化结果
plt.plot(positions)
- 输出:绘制位置随时间变化的折线图,展示粒子的随机运动轨迹。
3. 示例输出图形
横轴为步数,纵轴为位置,展示粒子在直线上的随机移动轨迹。
4. 扩展分析
(1) 多次模拟实验的统计特性
# 模拟100次随机游走,观察平均行为
n_simulations = 100
final_positions = [np.sum(np.random.choice([-1,1], 1000)) for _ in range(n_simulations)]
plt.hist(final_positions, bins=20, density=True)
plt.title("Distribution of Final Positions (100 Simulations)")
plt.xlabel("Final Position")
plt.ylabel("Probability Density")
plt.show()
- 结果:最终位置近似服从正态分布(中心极限定理)。
(2) 均方位移分析
5. 关键参数调整
- 非对称概率(如向右概率 70%):
steps = np.random.choice([-1,1], size=1000, p=[0.3, 0.7])
- 可变步长(如步长为 0.5 或 2):
steps = np.random.choice([-0.5, 2], size=1000)
6. 应用场景
- 金融价格模型:模拟股票价格的随机波动。
- 分子扩散:研究微粒在液体中的布朗运动。
- 算法测试:评估路径规划或搜索算法的性能。
通过上述代码和分析,你可以灵活模拟不同条件下的随机游走,并深入理解其统计特性!
热门推荐
17位国宝级大师联手绘神话,彭薇以现代艺术创新演绎
杨丽萍指导、徐梦迪主演,《西施》舞剧巡演场场爆满
电影《西施新传》:从传统美人到独立女性的蜕变
徐克《上海之夜》4K修复版 将在戛纳电影节首映
从自主导航到智能决策:AI技术引领航空航天新发展
徐克回归!《射雕英雄传:侠之大者》会有怎样的武侠世界?
若《射雕》破20亿,全球票房榜将改写,徐克稳居中国导演第一人
徐克拍的电影有哪些?细说徐克电影的十大经典之作
医保亲情账户,守护宝贝健康
医保卡绑定攻略:一文看懂如何共享医保个人账户
新春团圆宴必喝:8款中医养生汤配齐,寓意吉祥又滋补
怎样立遗嘱捐赠遗体?全流程指南
怎样立遗体捐赠遗嘱
火影忍者:一部关于成长与救赎的动漫史诗
《火影忍者》佐助:从设计演变到文化现象,岸本齐史笔下的经典角色
长河见证:颐和园里的慈禧光绪权力之争
1908年双亡:光绪慈禧的权力斗争与清朝终结
如何健康管理情绪?不是压抑就没事!3步骤 让内在需要被满足
为什么越来越多的年轻人选择单身生活?
心理咨询师:单身时如何应对孤独
《营造法式》:揭秘宋朝皇宫建筑的奥秘
武定乾坤,文治天下:赵匡胤的传奇人生
看茶叶好坏,认准这“4个特征”,品质一目了然,建议喝茶人了解
毛豆炒豆干的家常做法,用对方法轻松搞定,好吃又下饭,全家喜欢
刘博仁医师推荐:更年期的营养调理方案
上海康复医疗布局存短板,专家建议构建三级诊疗体系
宜宾三江新区:家庭医生定期进社区,已发放千余中医体验卡
揭秘火影忍者三大忍术:从基础原理到经典实战
剪纸艺术:南北风格各异,传统技艺面临传承困境
兰德报告:人工智能军事应用的新风险和机遇