python-随机漫步

创建RandomWalk 类

随机地选择前进方向

from random import choice

class RandomWalk():
    # 一个生成随机漫步数据的类
    
    def __init__(self, num_points=5000):
        # 初始化随机漫步的属性
        self.num_points = num_points
        
        #所有随机漫步都始于(0, 0)
        self.x_values = [0]
        self.y_values = [0]

choice()函数:从一个序列中随机选择一个元素并返回

随机漫步包含的默认点数设置为5000

选择方向

	def fill_walk(self):
	# 计算随机漫步包含的所有点
	
	    # 不断漫步,直到列表达到指定的长度
	    while len(self.x_values) < self.num_points:
	
	        # 决定前进方向以及沿这个方向前进的距离
	        x_direction = choice([1, -1])
	
	        x_distance = choice([0, 1, 2, 4])
	        x_step = x_direction * x_distance
	
	        y_direction = choice([1, -1])
	        y_distance = choice([0, 1, 2, 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)

方法fill_walk() 来生成漫步包含的点并决定每次漫步的方向

绘制随机漫步图

import matplotlib.pyplot as plt

# 创建一个RandomWalk实例
rw = RandomWalk()
rw.fill_walk()
# 将所有的点都绘制出来
plt.style.use('classic')
fig, ax = plt.subplots()
ax.scatter(rw.x_values, rw.y_values, s=15)
plt.show()

在这里插入图片描述

模拟多次随机漫步

while True:
    # 创建一个RandomWalk实例。
    rw = RandomWalk()
    rw.fill_walk()
    # 将所有的点都绘制出来。
    plt.style.use('classic')
    fig, ax = plt.subplots()
    ax.scatter(rw.x_values, rw.y_values, s=15)
    plt.show()
    keep_running = input("Make another walk? (y/n): ")
    if keep_running == 'n':
    	break

输入y或直接回车
在这里插入图片描述

设置随机漫步图的样式

给点着色

point_numbers = range(rw.num_points)
ax.scatter(rw.x_values, rw.y_values, s=15,  c=point_numbers,cmap=plt.cm.Blues, edgecolors='none')

edgecolors='none':删除每个点周围的轮廓

最终的随机漫步图从浅蓝色渐变为深蓝色

重新绘制起点和终点

# 突出起点和终点
ax.scatter(0, 0, c='green', edgecolors='none', s=100)
ax.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none',s=100)

隐藏坐标轴

ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

增加点数

rw = RandomWalk(50_000)

调整尺寸以适合屏幕

fig, ax = plt.subplots(figsize=(15, 9))

创建图表时,可传递参数figsize(元组) 以指定生成的图形的尺寸
单位为英寸
1英寸=2.54 厘米

分辨率:100像素/英寸
dpi:图像每英寸长度内的像素点数

fig, ax = plt.subplots(figsize=(15, 9),dpi=128)

在这里插入图片描述

完整代码展示

from random import choice


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

    def __init__(self, num_points=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, 4])
            x_step = x_direction * x_distance

            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 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)

import matplotlib.pyplot as plt

while True:
    # 创建一个RandomWalk实例。
    rw = RandomWalk(50_000)
    rw.fill_walk()
    # 将所有的点都绘制出来
    plt.style.use('classic')
    fig, ax = plt.subplots(figsize=(15, 9), dpi=128)
    point_numbers = range(rw.num_points)
    ax.scatter(rw.x_values, rw.y_values, s=15,  c=point_numbers,
               cmap=plt.cm.Blues, edgecolors='none')
    # 突出起点和终点
    ax.scatter(0, 0, c='green', edgecolors='none', s=100)
    ax.scatter(rw.x_values[-1], rw.y_values[-1],
               c='red', edgecolors='none', s=100)
    # 隐藏坐标轴。
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    plt.show()
    keep_running = input("Make another walk? (y/n): ")
    if keep_running == 'n':
        break
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔷莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值