随机漫步

随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。你可以这样认为,随机漫步就是蚂蚁在晕头转向的情况下,每次都沿随机的方向前行所经过的路径。

代码

from random import choice 

class RandomWalk():
    """一个生成随机漫步数据的类"""

    def __init__(self, num_points=5000): # 将随机漫步包含的默认点数设置为5000,这大到足以生成有趣的模式,同时又足够小,可确保能够快速地模拟随机漫步
        """初始化随机漫步的属性"""
        self.num_points = num_points

        # 所有随机漫步都始于(0, 0)
        self.x_values = [0] 
        self.y_values = [0]
		
	def fill_walk(self):
          """计算随机漫步包含的所有点"""

        # 不断漫步,直到列表达到指定的长度
        while len(self.x_values) < self.num_points: 

            # 决定前进方向以及沿这个方向前进的距离
            x_direction = choice([1, -1]) 
            x_distance = choice([0, 1, 2, 3, 4]) # 通过包含0,我们不仅能够沿两个轴移动,还能够沿y轴移动。
            x_step = x_direction * x_distance 

            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance 

            # 拒绝原地踏步
            if x_step == 0 and y_step == 0: 
                continue

            # 计算下一个点的x和y值
            next_x = self.x_values[-1] + x_step 
            next_y = self.y_values[-1] + y_step

            self.x_values.append(next_x)
            self.y_values.append(next_y)
			
			#为获取漫步中下一个点的 x 值,我们将x_step与x_values中的最后一个值相加(见❻),对于 y 值也做相同的处理。获得下一个点的 x 值和 y 值后,我们将它们分别附加到列表x_values和y_values的末尾。

将上面的打包好之后,可以有如下应用:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 创建一个RandomWalk实例,并将其包含的点都绘制出来
rw = RandomWalk() ❶
rw.fill_walk()
plt.scatter(rw.x_values, rw.y_values, s=15) ❷
plt.show()

画出来的图包含了5000个点的随机漫步图。

模拟多次随机漫步

要在不多次运行程序的情况下使用前面的代码模拟多次随机漫步,一种办法是将这些代码放在一个while循环中。

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values, rw.y_values, s=15)
    plt.show()

    keep_running = input("Make another walk? (y/n): ") ❶
    if keep_running == 'n':
        break

这些代码模拟一次随机漫步,在matplotlib查看器中显示结果,再在不关闭查看器的情况下暂停。如果你关闭查看器,程序将询问你是否要再模拟一次随机漫步。如果你输入y,可模拟多次随机漫步:这些随机漫步都在起点附近进行,大多沿特定方向偏离起点,漫步点分布不均匀等。要结束程序,请输入n

全部评论
校友了
1 回复 分享
发布于 2023-02-01 19:52 福建

相关推荐

自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务