《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个数据点的时候:

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值