考虑一种最简单的情形,即从位置 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)相关推荐

  1. 随机游走(Random Walk)模型详解:历史||数学表示||物理意义

    随机游走 随机游走(Random Walk,缩写为 RW),是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的.它能用来表示不规则的变动形式,如同一个人酒后乱步,所形成的随机过程记录. ...

  2. 随机游走 Random Walk

    随机游走(英语:Random Walk,缩写为 RW),是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的.[1][2]它能用来表示不规则的变动形式,如同一个人酒后乱步,所形成的随机过程 ...

  3. 基于随机游走Random Walk的图节点Node表示

    前言 在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等.如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于Random Walk的节点表示方 ...

  4. python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)

    什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...

  5. garch模型python步骤_利用python进行时间序列分析——从随机游走到GARCH模型(一)...

    本文是主体是翻译Time Series Analysis (TSA) in Python - Linear Models to GARCH.但是文章主要是python操作,而理论较少,因此在此基础上补 ...

  6. matlab 指定区域随机游走_了解随机游走模型和移动平均过程(Python)

    在本文中,我将介绍两个能够对时间序列进行建模的模型:随机游走和移动平均过程. 随机游走模型 随机游走模型由以下公式表示: 换句话说,当前时刻t的位置是前一时刻(t-1)的位置与噪声(用z表示)之和.这 ...

  7. 随机游走问题的神奇应用(一)

    泊松方程的随机游走求解 一.问题的提出 二.问题的求解 三.代码求解 可以用monteCarlo方法构建一个随机游走过程来求解偏微分方程. 一.问题的提出 ​ 求解二维泊松方程的第一边值问题如下: ∂ ...

  8. R语言Copula函数股市相关性建模:模拟Random Walk(随机游走)

    最近我们被客户要求撰写关于Copula的研究报告,包括一些图形和统计输出. 在引入copula时,大家普遍认为copula很有趣,因为它们允许分别对边缘分布和相依结构进行建模. copula建模边缘和 ...

  9. Random Walk(随机游走)

    本篇文章主要整理随机游走的基本思想,如果是深度学习图方法中的DeepWalk随机游走,传送门整理了几种流行的图嵌入方法. 金融和经济模型和概率统计学难以分离,对于这样的随机二级市场数据的理解和操作也是 ...

最新文章

  1. 都是套路:盘点 Java 面试中链表的几大解题模板方法!
  2. 学术期刊因投稿者并非双一流高校作者而拒稿引热议!这算学历歧视吗?
  3. php中的for循环最多循环多少次,php - 我在PHP中有2次时间,如何运行foreach循环来遍历所有这些日子? (最后24小时同时循环1小时!) - 堆栈内存溢出...
  4. producer send源码_Kafka源码深度剖析系列(七)——Producer核心流程初探
  5. C++实现仿射加密法
  6. SQLSetEnvAttr
  7. 五个你绝不可忽视的HTML5特性
  8. 给easyui datagrid 添加mouseover和mouseout事件
  9. 嵌入式linux的学习笔记-共享内存(六)
  10. QTcpSocket简单使用
  11. TCP/IP协议五:HTTP协议详解
  12. 【ASO项目使用的技术】(例如:1、hook CFUserNotificationCreat 截取Header 部分信息、Message内容 进行任务处理2、设备信息的修改、清理数据3、js逆向)
  13. 小甲鱼(鱼C)课后作业代码 39讲
  14. python身份证格式
  15. SQL Server 2008 Service Pack 1 - CTP 发布
  16. 暑假学习计划:Day_1.JSPServletTomcat 环境搭建到基础的认识。
  17. 量化趣谈——不务正业的数学家James Simons
  18. 新手程序员如何快速成长?
  19. K3s+Rainbond默认集群添加agent节点
  20. 金蝶BOS开发数据库工具类

热门文章

  1. 动态规划特训:贝茜的晨练(多状态转移)
  2. FreeMarker数值数据处理问题
  3. php脾组词,脾组词_脾字组词_脾的组词意思及拼音
  4. mysql中复制表结构的方法(亲测通过)
  5. KR通过Server酱通知
  6. 做个自己站内搜索引擎
  7. 入门【必学】20个SEO优化术语
  8. ibatis 使用入门
  9. 查询建立连接的IP地址
  10. Keil uVision5 MDK(ARM)软件的介绍、下载、安装与注册