《python编程:从入门到实践》随机漫步

创建一个模块放在  suiji_walk.py 当中: 
#coding=gbk
#随机漫步
#随机漫步是每次行走都是随机的,没有明确的方向, 结果是有一系列的随机决策所决定的。 

#建立一个随机漫步的类
from random import choice
import random
class RandomWalk():
    def __init__(self, num_points = 5000):
        self.num_points = num_points 
        self.x_values = [0]         #输出第一个值得坐标为(0,0)为原点
        self.y_values = [0]
#生成随机漫步的点, 并决定每次随机漫步的方向
    def  fill_walk(self):
        #random.seed(123)        #设置随机种子
        while len(self.y_values) < self.num_points :
            x_direction = choice([1,-1])        #在 -1 和 1 间选择 ,表示左右方向
            x_distance = choice([0,1,2,3,4])
            x_step = x_distance * x_direction       
            
            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_next= self.x_values[-1] + x_step  #计算新一个点,将最新的点与步长相加
            y_next = self.y_values[-1] + y_step 
            
            self.x_values.append(x_next)        #存放到列表当中,方便下一步的数据可视化,总共有5000个点
            self.y_values.append(y_next)
#绘制随机漫步图
import matplotlib.pyplot as plt
rw = RandomWalk()
rw.fill_walk()
plt.scatter(rw.x_values, rw.y_values,color='red',s=5)   #  s表示点的大小
plt.savefig(r'C:\Users\Administrator\Desktop\mysal\Python\random_walk.png') #保存图片
plt.show() 
输出图像:



模拟多次随机漫步

创建一个模块放在  suiji_walk2.py 当中: 

#coding=gbk
#模拟多次的随机漫步
import matplotlib.pyplot as plt
from suiji_walk import RandomWalk
while True:
    rw= RandomWalk()
    rw.fill_walk()
    ponits_num = list(range(rw.num_points))
    #对随机漫步的进行先后顺序的着色
    plt.scatter(rw.x_values, rw.y_values , s=5, c=ponits_num, cmap=plt.cm.Blues,
                edgecolors='none')
    plt.show()
    active = input('\n 请输入 y/n')
    if active == 'n':
        break

绘制起点和终点,并隐藏坐标轴
创建一个模块放在  suiji_walk3.py 当中: 
#coding=gbk
import matplotlib.pyplot as plt
from suiji_walk import RandomWalk
#重新绘制起点和终点
while True:
    rw= RandomWalk()
    rw.fill_walk()
    ponits_num = list(range(rw.num_points))
    #对随机漫步的进行先后顺序的着色
    plt.scatter(rw.x_values, rw.y_values , s=5, c=ponits_num, cmap=plt.cm.Blues,
                edgecolors='none')
    #突出起点和终点
    plt.scatter(0,0, c='green',edgecolors='none',s=50)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors= 'none', s=50)
    #隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    #调整尺寸以适应屏幕
    #plt.figure(dpi=128,figsize=(6,6))
    plt.show()
    active = input('\n 请输入 y/n')
    if active == 'n':
        break

50000个数据点的时候:



猜你喜欢

转载自blog.csdn.net/qq_40587575/article/details/80821531