使用 NumPy 来模拟随机游走(Random Walk)
考虑一种最简单的情形,即从位置 0
开始,每次前进一步(step=1
)或者后退一步(step=-1
),前进与后退的概率相同。
不使用 NumPy,直接使用 Python 内置的 random
函数:
import random
import matplotlib.pyplot as pltposition = 0
walk = [position]
steps = 1000
for i in range(steps):step = 1 if random.randint(0, 1) else -1position += stepwalk.append(position)plt.plot(walk[:100])
plt.show()
其实,walk
的值其实就是 step
的累加值。我们考虑使用 NumPy 来实现:
nsteps = 1000
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
我们可以注意到两个 randint
函数的区别:
- Python 的内置
random
模块每次只会采样一个值,而numpy.random
可以同时采样一系列值。这意味着在产生大量样本时,numpy.random
的速度会比random
模块快上几个量级 random.randint
取值范围:[low, high]
;numpy.random.randint
取值范围:[low, high)
我们可以很轻易的得到 walk
的最大值或者最小值:
walk.min()
"""
-7
"""
如果我们想要找到 the first crossing time,即第一次穿过某个位置的 step
,例如,我们想找第一次离原点 0 距离为 10 的 step
:
(np.abs(walk) >= 10).argmax()
np.abs(walk) >= 10
返回一个布尔数组,我们用 argmax
方法找到第一个值为 True
的位置(True
即为最大值,且argmax
会返回第一个最大值出现的位置)。
上面我们考虑了模拟一次随机游走的流程,如果我们想模拟很多次,例如,5000次,那么使用 NumPy 也可以很容易实现:
nwalks = 5000
nsteps = 1000draws = np.random.randint(0, 2, size=(nwalks, nsteps))steps = np.where(draws > 0, 1, -1)
walks = steps.cumsum(1) # 计算每行,也就是每次模拟的累加值walks
"""
array([[ 1, 2, 3, ..., 52, 51, 50],[ 1, 2, 1, ..., 20, 19, 20],[ 1, 2, 3, ..., -34, -35, -36],...,[ 1, 2, 3, ..., 44, 45, 46],[ -1, 0, -1, ..., 0, -1, 0],[ 1, 2, 1, ..., 48, 49, 50]])
"""
我们计算这 5000 次模拟中有多少次模拟穿过了 30 或 -30 位置:
hits30 = (np.abs(walks) >= 30).any(1)
hits30.sum()
"""
3361
"""
进一步,我们可以得出这 3361 次模拟中第一次穿过 30 或 -30 位置的平均 step
:
crossing_time = (np.abs(walks[hits30]) >= 30).argmax(1)
crossing_time.mean()
"""
500.99226420708123
"""
References
Python for Data Analysis, 2 n d ^{\rm nd} nd edition. Wes McKinney.
使用 NumPy 来模拟随机游走(Random Walk)相关推荐
- 随机游走(Random Walk)模型详解:历史||数学表示||物理意义
随机游走 随机游走(Random Walk,缩写为 RW),是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的.它能用来表示不规则的变动形式,如同一个人酒后乱步,所形成的随机过程记录. ...
- 随机游走 Random Walk
随机游走(英语:Random Walk,缩写为 RW),是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的.[1][2]它能用来表示不规则的变动形式,如同一个人酒后乱步,所形成的随机过程 ...
- 基于随机游走Random Walk的图节点Node表示
前言 在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等.如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于Random Walk的节点表示方 ...
- python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)
什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...
- garch模型python步骤_利用python进行时间序列分析——从随机游走到GARCH模型(一)...
本文是主体是翻译Time Series Analysis (TSA) in Python - Linear Models to GARCH.但是文章主要是python操作,而理论较少,因此在此基础上补 ...
- matlab 指定区域随机游走_了解随机游走模型和移动平均过程(Python)
在本文中,我将介绍两个能够对时间序列进行建模的模型:随机游走和移动平均过程. 随机游走模型 随机游走模型由以下公式表示: 换句话说,当前时刻t的位置是前一时刻(t-1)的位置与噪声(用z表示)之和.这 ...
- 随机游走问题的神奇应用(一)
泊松方程的随机游走求解 一.问题的提出 二.问题的求解 三.代码求解 可以用monteCarlo方法构建一个随机游走过程来求解偏微分方程. 一.问题的提出 求解二维泊松方程的第一边值问题如下: ∂ ...
- R语言Copula函数股市相关性建模:模拟Random Walk(随机游走)
最近我们被客户要求撰写关于Copula的研究报告,包括一些图形和统计输出. 在引入copula时,大家普遍认为copula很有趣,因为它们允许分别对边缘分布和相依结构进行建模. copula建模边缘和 ...
- Random Walk(随机游走)
本篇文章主要整理随机游走的基本思想,如果是深度学习图方法中的DeepWalk随机游走,传送门整理了几种流行的图嵌入方法. 金融和经济模型和概率统计学难以分离,对于这样的随机二级市场数据的理解和操作也是 ...
最新文章
- 都是套路:盘点 Java 面试中链表的几大解题模板方法!
- 学术期刊因投稿者并非双一流高校作者而拒稿引热议!这算学历歧视吗?
- php中的for循环最多循环多少次,php - 我在PHP中有2次时间,如何运行foreach循环来遍历所有这些日子? (最后24小时同时循环1小时!) - 堆栈内存溢出...
- producer send源码_Kafka源码深度剖析系列(七)——Producer核心流程初探
- C++实现仿射加密法
- SQLSetEnvAttr
- 五个你绝不可忽视的HTML5特性
- 给easyui datagrid 添加mouseover和mouseout事件
- 嵌入式linux的学习笔记-共享内存(六)
- QTcpSocket简单使用
- TCP/IP协议五:HTTP协议详解
- 【ASO项目使用的技术】(例如:1、hook CFUserNotificationCreat 截取Header 部分信息、Message内容 进行任务处理2、设备信息的修改、清理数据3、js逆向)
- 小甲鱼(鱼C)课后作业代码 39讲
- python身份证格式
- SQL Server 2008 Service Pack 1 - CTP 发布
- 暑假学习计划:Day_1.JSPServletTomcat 环境搭建到基础的认识。
- 量化趣谈——不务正业的数学家James Simons
- 新手程序员如何快速成长?
- K3s+Rainbond默认集群添加agent节点
- 金蝶BOS开发数据库工具类