随机漫步
在本节中,我们将使用Python生成随机漫步数据,再使用matplotlib以引入瞩目的方式将这些数据呈现出来。随机漫步是这样行走得到的路径:每次行走都完全随机的,没有明确的方向,结果是由一系列随机决策决定的。你可以这样认为,随机漫步就是蚂蚁在晕头转向的情况下,每次都沿随机的方向前行所经过的路径。
在自然界、物理学、生物学、化学和经济领域,随机漫步都有实际的用途。例如,漂浮在水滴上的花粉因不断收到水分子的挤压而在水面上移动。水滴中的分子运动是随机的,因此花粉在水面上的运动路径犹如随机漫步。我们稍后将编写的代码模拟了现实世界的很多情形。
创建RandomWalk( )类
为了模拟随机漫步,我们将创建一个名为RandomWalk( )的类,它随机地选择前进方向。这个类需要三个属性,其中一个是存储随机漫步次数的变量,其他两个是列表,分别存储随机漫步经过的每个点的x和y坐标。
RandomWalk( )类只包含两个方法:__init__( )和fill_walk( ),其中后者计算随机漫步经过的所有点。下面我们来看看__init__( ),如下所示:
为做出随机决策,我们将所有可能的选择都存储在一个列表中,并在每次做决策时都使用choice( )来决定使用哪种选择。接下来,我们将随机漫步包含的默认点数设置为5000,这大到足以生成有趣的模式,同时又足够小,可以确保能够快速地模拟随机漫步。然后,接下来,我们创建两个用于存储x值和y值的列表,并让每次随机漫步都从点(0,0)出发。
选择方向
我们将使用fill_walk( )来生成漫步包含的点,并决定每次漫步的方向,如下所示:
我们首先建立了一个循环,这个循环不断运行,直到漫步包含所需数量的点。这个方法的主要部分告诉Python如何模拟四种漫步决定:向右走还是向左走?沿指定方向走多远?向上走还是向下走?沿着指定方向走多远?
我们使用了choice([1, -1])给x_direction选择一个值,结果要么是表示向右走的1,要么是表示向左走的-1。接下来,choice([0, 1, 2, 3, 4])随机地选择一个0~4之间的整数,告诉Python沿指定方向走多远(x_distance)。
接着,我们将移动方向乘以移动距离,以确定沿x轴和y轴移动的距离。如果x_step为正,将向右移动,为负将向左移动,为0则垂直移动;同理对于y_step也是这样。但是如果当x_step和y_step都为0的时候,这意味着原地踏步,我们拒绝这种情况,因此,接着执行下一次循环。
为了获取漫步中下一个点的x值,我们将x_step与x_values中的最后一个值相加。对于y值也做相同的处理。获取下一个点的x值和y值之后,我们将他们分别附加到列表x_values和y_values的末尾。
绘制随机漫步图
下面的代码将随机漫步的所有点都绘制出来:
我们首先导入了模块pyplot和RandomWalk类。然后创建了一个RandomWalk实例,并将其存储到rw中,再调用fill_walk( )。我们将随机漫步包含的x和y值传递给scatter( ),并选择了合适的尺寸: