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 相关文章推荐
python修改字典内key对应值的方法
Jul 11 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
详解Python核心对象类型字符串
Feb 11 Python
python入门教程 python入门神图一张
Mar 05 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
python tkinter实现连连看游戏
Nov 16 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与SQL注入攻击[二]
2007/04/17 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
python字典序问题实例
2014/09/26 Python
Python实现字典的key和values的交换
2015/08/04 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
python用post访问restful服务接口的方法
2018/12/07 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
python set内置函数的具体使用
2019/07/02 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
学python最电脑配置有要求么
2020/07/05 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
波兰补充商店:Muscle Power
2018/10/29 全球购物
2014年创卫实施方案
2014/02/18 职场文书
公司委托书格式范文
2014/04/04 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
领导班子整改措施
2014/10/24 职场文书
2015年超市工作总结
2015/04/09 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫