Python超详细分步解析随机漫步


Posted in Python onMarch 17, 2022

创建RandomWalk类

为模拟随机漫步,我们将创建一个RandomWalk类,随机选择前进方向,这个类有三个属性,一个存储随机漫步的次数,另外两个存储随机漫步的每个点的x,y坐标,每次漫步都从点(0,0)出发

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]

选择方向

我们将使用fill_walk()来生成随机漫步包含的点,并决定每次漫步的方向。并将其添加到random_walk.py中 改正代码如下:

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, 3, 4])
            x_step = x_direction * x_distance

            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,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)

绘制随机漫步图

下面的代码将随机漫步的所有点都绘制出来,将文件命名为rw_visual.py

import matplotlib.pyplot as plt

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

模拟多次随机漫步

每次随机漫步都不同,因此每次生成的各种模式也很有趣,要在不多次运行程序的情况下,进行随机漫步,可以把代码放入一个while循环中,每次关闭matplotlib查看器,系统会询问你是否再次模拟随机漫步(输入y将再次进行随机漫步,输入n将结束程序) 改进代码如下:

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=10)
    plt.show()

    keep_running = input("make another walk? (y/n):")
    if keep_running.upper() == 'N':
        break

每次随机漫步都不同,就如人的一生每走一步都会有不同的经历???

Python超详细分步解析随机漫步

给点着色

使用颜色映射指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让颜色更明显。将参数c设置为points_numbers,指定使用颜色映射Blues,并传递实参edgecolor=none以删除每个点周围的轮廓,随机漫步图会从浅蓝色渐变到深蓝色,代码如下:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态,就不断模拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors='none', s=10)
    plt.show()

    keep_running = input("make another walk? (y/n):")
    if keep_running.upper() == 'N':
        break

效果如下:

Python超详细分步解析随机漫步

突出起点和终点

还可以呈现出随机漫步的起点和终点,我们让起点和终点变得更大,并显示为不同的颜色,代码如下:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态,就不断模拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors='none', s=10)
    # 突出起点和重点
    plt.scatter(0, 0, c='green', edgecolors='none', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
    plt.show()

    keep_running = input("make another walk? (y/n):")
    if keep_running.upper() == 'N':
        break

效果如下:

Python超详细分步解析随机漫步

增加点数

增加点数,以提供更多的数据,我们在创建RandomWalk实例时增大num_points的值,并在绘图时改变每个点的大小,代码如下:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态,就不断模拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors='none', s=1)
    # 突出起点和重点
    plt.scatter(0, 0, c='green', edgecolors='none', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
    plt.show()

    keep_running = input("make another walk? (y/n):")
    if keep_running.upper() == 'N':
        break

效果如下:

Python超详细分步解析随机漫步

调整尺寸以适用屏幕

图表适合屏幕大小时,更能有效地将数据中的规律呈现出来。函数figure()用于指定图表的宽度、高度、分辨率和背景色。需要给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸(单位为英寸) 如果你知道自己的系统分辨率,可使用形参dpi像figure()传递该分辨率,以有效利用可用的屏幕空间代码如下:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态,就不断模拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()
    # 设置绘图窗口的大小
    plt.figure(dpi=128, figsize=(10, 6))
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors='none', s=1)
    # 突出起点和重点
    plt.scatter(0, 0, c='green', edgecolors='none', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
    plt.show()

    keep_running = input("make another walk? (y/n):")
    if keep_running.upper() == 'N':
        break

运行效果如下图所示

Python超详细分步解析随机漫步

以上就是绘制随机漫步的花里胡哨的操作,会持续更新python相关知识

?人生苦短,我用python?

到此这篇关于Python超详细分步解析随机漫步的文章就介绍到这了,更多相关Python 随机漫步内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
python统计cpu利用率的方法
Jun 02 Python
简介Django中内置的一些中间件
Jul 24 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
python实现批量解析邮件并下载附件
Jun 19 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
Python中字符串与编码示例代码
May 20 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
什么是Python中的顺序表
Jun 02 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 Python
yolov5返回坐标的方法实例
Mar 17 #Python
PyTorch中的torch.cat简单介绍
Mar 17 #Python
Python Pygame实战在打砖块游戏的实现
python超详细实现完整学生成绩管理系统
Mar 17 #Python
Python Pygame实战之塔防游戏的实现
pytorch中的 .view()函数的用法介绍
Mar 17 #Python
Python绘画好看的星空图
You might like
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
js日期联动示例
2014/05/02 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
用python批量移动文件
2021/01/14 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
学校对教师的评语
2014/04/28 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
前台文员岗位职责
2015/02/04 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
品德与社会教学反思
2016/02/24 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
教你使用pyinstaller打包Python教程
2021/05/27 Python
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python