我们将使用Python来生成随机漫步数据,再使用matplotlib将这些数据呈现出来。随机漫步的路径是这样的:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。
1.创建RandomWalk() 类
为模拟随机漫步,我们将创建一个名为RandomWalk 的类,它随机地选择前进方向。这个类需要三个属性,其中一个是存储随机漫步次数的变量,其他两个是列表,分别存储随机漫步经过的每个点的 x 和 y 坐标。
其中RandomWalk 类只包含两个方法:__init__() 和fill_walk() ,其中后者计算随机漫步经过的所有点。
为做出随机决策,我们将所有可能的选择都存储在一个列表中,并在每次做决策时都使用choice() 来决定使用哪种选择。
类RandomWalk()是在random_walk.py模块中,具体代码如下:
![](https://img.haomeiwen.com/i6626611/b922321754ffe91b.png)
代码第7行中num_points存储的是存储随机漫步次数,在这里设定默认值为5000;
第12和13行代码中self.x_values和self.y_values这两个列表里放的是点的x、y坐标,这里设定默认是从原点(0,0)开始。
2.选择方向
我们将使用fill_walk() 来生成漫步包含的点,并决定每次漫步的方向,如下所示。
![](https://img.haomeiwen.com/i6626611/0b8af5eaf136ef4a.png)
第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.绘制随机漫步图
下面的代码将随机漫步的所有点都绘制出来:
![](https://img.haomeiwen.com/i6626611/43316d29205f3577.png)
我们首先导入了模块pyplot 和RandomWalk 类,然后创建了一个RandomWalk 实例(第7行代码),并将其存储到rw 中,再调用fill_walk() 。
在第9行代码,我们将随机漫步包含的x 和 y 值传递给scatter() ,函数scatter()利用提供的x和y坐标进行画图,在这里我们设定点的大小s=5。
两次运行结果如下:
![](https://img.haomeiwen.com/i6626611/b1454b3eb4b2e502.png)
![](https://img.haomeiwen.com/i6626611/1cb55dcfad619f42.png)
网友评论