随机漫步

#encoding:utf-8

from random import choice
import matplotlib.pyplot as plt

class RandomWalk():
    '''一个生成随机漫步数据的类'''
    def __init__(self, num_points = 50000):
        '''初始化随机漫步的属性'''
        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_step = self.get_walk()
            y_step = self.get_walk()

            #拒绝原地踏步
            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)

    def get_walk(self):
        direction = choice([1, -1])
        distance = choice([0, 1, 2, 3, 4])
        step = direction * distance
        return step

while True:
    rw = RandomWalk()
    rw.fill_walk()

    #设置绘图窗口的尺寸
    plt.figure(dpi = 128, figsize = (10, 6))    #dpi为分辨率,figsize为窗口尺寸

    #绘制点并将图形显示出来
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c = point_numbers, cmap = plt.cm.Blues, edgecolor = 'none', s = 1)
    plt.scatter(0, 0, c = 'green', edgecolors = 'none', s = 100)      #重新绘制起点和终点
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c = 'green', edgecolors = 'none', s = 100)

    #隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

    plt.show()

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

这里写图片描述

### 随机漫步的概念及其Python实现 随机漫步是一种基于概率的过程,在该过程中,每一步的方向或大小由某种随机机制决定。这种过程广泛应用于物理学、金融学以及计算机科学等领域。 以下是使用Python实现随机漫步的一个简单示例: ```python import numpy as np import matplotlib.pyplot as plt np.random.seed(42) # 设置随机种子以便结果可重复 # 定义步数 steps = 1000 positions = [0] for _ in range(steps): step_direction = np.random.choice([-1, 1]) # 随机选择向前或向后移动 new_position = positions[-1] + step_direction positions.append(new_position) plt.figure(figsize=(10, 6)) plt.plot(positions) plt.title('Random Walk Example') plt.xlabel('Step Number') plt.ylabel('Position') plt.grid(True) plt.show() ``` 此代码片段展示了如何利用`numpy`库生成一系列随机方向,并将其累加形成位置序列[^2]。最终的结果可以通过`matplotlib`绘制成图形来直观展示随机漫步路径。 如果希望扩展至二维空间,则可以采用如下方法: ```python num_steps = 1000 x_positions = [0] y_positions = [0] for _ in range(num_steps): dx, dy = np.random.randn(2) # 正态分布的两个独立样本表示x,y方向的变化量 next_x = x_positions[-1] + dx next_y = y_positions[-1] + dy x_positions.append(next_x) y_positions.append(next_y) plt.figure(figsize=(8, 8)) plt.plot(x_positions, y_positions) plt.scatter([x_positions[0]], [y_positions[0]], color="green", label='Start') # 起始点标记为绿色 plt.scatter([x_positions[-1]], [y_positions[-1]], color="red", label='End') # 结束点标记为红色 plt.legend() plt.title('2D Random Walk Visualization') plt.xlabel('X Position') plt.ylabel('Y Position') plt.axis('equal') plt.show() ``` 这段程序实现了更复杂的二维随机漫步模型,并通过散点图标注起点与终点的位置[^3]。 对于更加高级的应用场景,比如蒙特卡洛仿真的醉汉行走问题,还可以引入更多维度或者约束条件来进行深入探讨[^4]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值