美文网首页
python实现随机漫步

python实现随机漫步

作者: 梦vctor | 来源:发表于2018-09-26 09:18 被阅读0次

    1、随机漫步
    随机漫步:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。可以认为是:蚂蚁在晕头转向的情况下,每次都沿随机的方向前行所经过的路径。
    1.1 创建RandomWalk()类

    from random import choice   #每次做决策时都使用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]
    

    1.2 选择方向

    def fill_walk(self):
            '''计算随机漫步包含的所有店'''
    
            #不断漫步,直到列表达到指定的长度
            while len(self.x_values)<self.num_points:   #模拟四种漫步决定:向左还是向右走?沿指定的方向走多远?向上还是向下走?沿选定的方向走多远?
    
                #决定前进方向以及沿这个方向前进的距离
                x_values=choice([1,-1]) #要么向右走1,要么向左走的-1
                x_distance=choice([0,1,2,3,4])  #随机地选择一个0~4之间的整数,沿指定方向走多远
                x_step=x_direction*x_distance   #移动方向乘以移动距离,以确定沿x和y轴移动的距离。x_step为正,将向右移动,为负向左,为零将垂直移动
    
                y_direction=choice([1,-11])
                y_distance=choice([0,1,2,3,4])
                y_step=y_direction*y_distance   #y_step为正向上,为负向下,为零水平移动。
    
                #拒绝原地踏步
                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)
    

    1.3 绘制随机漫步图

    import matplotlib.pyplot as plt
    
    from random_walk import Random_walk
    
    #创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw=Random_walk()
    rw.fill_walk()
    plt.scatter(rw.x_values,rw.y_values,s=15)
    plt.show()
    

    输出:


    image.png

    1.4 模拟多次随机漫步

    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()
    
        keeping_running=input("Make another walk?(y/n): ")
        if keeping_running=='n':
            break
    

    1.5 给点着色

    import matplotlib.pyplot as plt
    
    from random_walk import RandomWalk
    
    #只要程序处于活动状态,就不断地模拟随机漫步
    while True:
        #创建一个RandomWalk实例,并将其包含的点都绘制出来
        rw=RandomWalk()
        rw.fill_walk()
    
        point_number=list(range(rw.num_points)) #,随机生成一个数字列表,包含各点的先后顺序
        plt.scatter(rw.x_values,rw.y_values,c=point_number,cmap=plt.cm.Blues,edgecolor='none',s=15) #根据漫步中各点的先后顺序进行着色
        plt.show()
    
        keeping_running=input("Make another walk?(y/n): ")
        if keeping_running=='n':
            break
    

    输出:


    image.png

    1.6 重新绘制起点和终点

    import matplotlib.pyplot as plt
    
    from random_walk import RandomWalk
    
    #只要程序处于活动状态,就不断地模拟随机漫步
    while True:
        #创建一个RandomWalk实例,并将其包含的点都绘制出来
        rw=RandomWalk()
        rw.fill_walk()
    
        point_number=list(range(rw.num_points)) #,随机生成一个数字列表,包含各点的先后顺序
        plt.scatter(rw.x_values,rw.y_values,c=point_number,cmap=plt.cm.Blues,edgecolor='none',s=15) #根据漫步中各点的先后顺序进行着色
    
        #突出起点和终点
        plt.scatter(0,0,c='green',edgecolor='none',s=100)
        plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
        
        plt.show()
    
        keeping_running=input("Make another walk?(y/n): ")
        if keeping_running=='n':
            break
    

    输出:


    image.png

    1.7 隐藏坐标轴

    import matplotlib.pyplot as plt
    
    from random_walk import RandomWalk
    
    #只要程序处于活动状态,就不断地模拟随机漫步
    while True:
        #创建一个RandomWalk实例,并将其包含的点都绘制出来
        rw=RandomWalk()
        rw.fill_walk()
    
        point_number=list(range(rw.num_points)) #,随机生成一个数字列表,包含各点的先后顺序
        plt.scatter(rw.x_values,rw.y_values,c=point_number,cmap=plt.cm.Blues,edgecolor='none',s=15) #根据漫步中各点的先后顺序进行着色
    
        #突出起点和终点
        plt.scatter(0,0,c='green',edgecolor='none',s=100)
        plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
    
        #隐藏坐标轴
        plt.axes().get_xaxis().set_visible(False)
        plt.axes().get_yaxis().set_visible(False)
    
        plt.show()
    
        keeping_running=input("Make another walk?(y/n): ")
        if keeping_running=='n':
            break
    

    输出:


    image.png

    1.8 增加点数

    import matplotlib.pyplot as plt
    
    from random_walk import RandomWalk
    
    #只要程序处于活动状态,就不断地模拟随机漫步
    while True:
        #创建一个RandomWalk实例,并将其包含的点都绘制出来
        rw=RandomWalk(50000)
        rw.fill_walk()
    
        #绘制点并将图形显示出来
        point_number=list(range(rw.num_points)) #,随机生成一个数字列表,包含各点的先后顺序
        plt.scatter(rw.x_values,rw.y_values,c=point_number,cmap=plt.cm.Blues,edgecolor='none',s=1)  #根据漫步中各点的先后顺序进行着色
    
        #突出起点和终点
        plt.scatter(0,0,c='green',edgecolor='none',s=100)
        plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
    
        #隐藏坐标轴
        plt.axes().get_xaxis().set_visible(False)
        plt.axes().get_yaxis().set_visible(False)
    
        plt.show()
    
        keeping_running=input("Make another walk?(y/n): ")
        if keeping_running=='n':
            break
    

    输出:


    image.png

    1.9 调整尺寸以适应屏幕

        #设置绘图窗口的尺寸
        plt.figure(figsize=(10,6))  #figure()用于指定图表的宽度、高度、分辨率和背景色。需要给figsize指定一个元组,指出绘图窗口的尺寸
    

    输出:


    image.png

    相关文章

      网友评论

          本文标题:python实现随机漫步

          本文链接:https://www.haomeiwen.com/subject/qqskoftx.html