91、随机漫步

我们将使用Python来生成随机漫步数据,再使用matplotlib将这些数据呈现出来。随机漫步的路径是这样的:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。

1.创建RandomWalk() 类

为模拟随机漫步,我们将创建一个名为RandomWalk 的类,它随机地选择前进方向。这个类需要三个属性,其中一个是存储随机漫步次数的变量,其他两个是列表,分别存储随机漫步经过的每个点的 x 和 y 坐标。

其中RandomWalk 类只包含两个方法:__init__() 和fill_walk() ,其中后者计算随机漫步经过的所有点。

为做出随机决策,我们将所有可能的选择都存储在一个列表中,并在每次做决策时都使用choice() 来决定使用哪种选择。

类RandomWalk()是在random_walk.py模块中,具体代码如下:

图片发自简书App

代码第7行中num_points存储的是存储随机漫步次数,在这里设定默认值为5000;

第12和13行代码中self.x_values和self.y_values这两个列表里放的是点的x、y坐标,这里设定默认是从原点(0,0)开始。

2.选择方向

我们将使用fill_walk() 来生成漫步包含的点,并决定每次漫步的方向,如下所示。

图片发自简书App

第19行代码中我们建立了一个循环,这个循环不断运行,直到漫步包含所需数量的点。这个方法的主要部分告诉Python如何模拟四种漫步决定:向右走还是向左走?沿指定的方向走多远?向上走还是向下走?沿选定的方向走多远?

第21行我们使用choice()函数,choice() 方法返回一个列表,元组或字符串的随机项,意思就是每次从这个列表里随意选一个。

在这里choice([1, -1]) 给x_direction 选择一个值,结果要么是表示向右走的1,要么是表示向左走的-1。接下来,choice([0, 1, 2, 3, 4]) 随机地选择一个0~4之间的整数,告诉Python 沿指定的方向走多远(x_distance )。(通过包含0,我们不仅能够沿两个轴移动,还能够沿y 轴移动。)

代码的23和27行描述步数的计算方法,我们将移动方向乘以移动距离,以确定沿 x 和 y 轴移动的距离。如果x_step 为正,将向右移动,为负将向左移动,而为零将垂直移动;如果y_step 为正,就意味着向上移动,为负意味着向下移动,而为零意味着水平移动。如果x_step 和y_step 都为零,则意味着原地踏步,我们拒绝这样的情况,接着执行下一次循环。

第34到38行,为获取漫步中下一个点的 x 值,我们将x_step 与x_values 中的最后一个值相加,其中x_values[-1]表示查找列表x_values中最后一个数字,把这个数字加上步数得出下一个点的x坐标,对于 y 值也做相同的处理。获得下一个点的 x 值和 y 值后,我们将它们分别附加到列表x_values 和y_values 的末尾。

3.绘制随机漫步图

下面的代码将随机漫步的所有点都绘制出来:

图片发自简书App

我们首先导入了模块pyplot 和RandomWalk 类,然后创建了一个RandomWalk 实例(第7行代码),并将其存储到rw 中,再调用fill_walk() 。

在第9行代码,我们将随机漫步包含的x 和 y 值传递给scatter() ,函数scatter()利用提供的x和y坐标进行画图,在这里我们设定点的大小s=5。

两次运行结果如下:

图片发自简书App
图片发自简书App

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,497评论 19 139
  • 一、实验目的 学习使用 weka 中的常用分类器,完成数据分类任务。 二、实验内容 了解 weka 中 explo...
    yigoh阅读 12,767评论 5 4
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 9,411评论 1 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,692评论 25 709
  • 今天感恩教育局根据天气情况及时调整停课消息,让我们有机会及时通知家长停课。感恩所有值班老师们积极配合及时发通知给家...
    念秀阅读 1,189评论 0 1