【生成数据】随机漫步

news2024/11/26 9:47:49

使用python来生成随机漫步数据,再使用matplotlib将这些数据呈现出来。

随机漫步:每次行走都是完全随机的,没有明确的方向,结果是由一系列随机决策决定的。也可以这么认为,随机漫步就是蚂蚁在晕头转向的情况下,每次沿着随机的方向前行所经过的路径。

random_walk.py

创建RandomWalk()类

为了模拟随机漫步,创建一个名为RandomWalk的类,随机地选择前进方向。

  • 三个属性:
    存储随机漫步次数的变量;
    存储随机漫步经过的每个点的x和y坐标(两个列表)
  • 两个方法:
    __init() 生成随机漫步数据
    fill_walk() 计算随机漫步经过的所有点

初始化随机漫步的属性__init()

from random import choice
#每次做决定时都是用choice来决定使用那种选择

"""
一个生成随机漫步数据的类
"""
class RandomWalk():

    def __init__(self, num_points=5000):
        """初始化随机漫步的属性"""
        
        #默认点数为5000
        self.num_points = num_points

        #所有随机漫步都from(0,0)
        self.x_values = [0]
        self.y_values = [0]

选择方向fill_walk()

生成漫步包含的点,并决定每次漫步的方向

    """计算随机漫步包含的所有点"""
    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

绘制简单的随机漫步图

将随机漫步的所有点都绘制出来

创建一个RandomWalk实例,调用fill_walk,将随机漫步包含的x和y值传递给scatter并显示,代码如下:

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

以下是两次包含5000个点的随机漫步
在这里插入图片描述

在这里插入图片描述

模拟多次随机漫步

每次随机漫步都不同,因此将这些代码放入一个while循环中,可以查看多次漫步:

#只要程序处于活动状态,就不断地模拟随机漫步
while True:
    #创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values, rw.y_values, s=15)
    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break

设置随机漫步图的样式

给点着色

使用颜色映射来指出漫步中各个点的先后顺序,并删除每个点的黑色轮廓,让它们的颜色更明显。

为根据漫步中各点的先后顺序进行着色,传递参数c,并将其设置为一个列表,其中包含各点的先后顺序,由于这些点是按顺序绘制的,因此给参数c指定的列表只需包含数字1-5000:

 plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor='none', s=15)

将参数c设置为point_numbers,指定使用颜色映射Blues,并传递实参edgecolor='none’以删除每个点周围的轮廓,最终的随机漫步图从浅蓝色变为深蓝色,着色效果如图所示:
在这里插入图片描述

在这里插入图片描述

重新绘制起点和终点

除了给每个随机漫步的各个点着色,以指出它们的先后顺序,还可在绘制随机漫步图后重新绘制起点和终点。

让起点和终点变得更大,并显示为不同的颜色,代码如下所示:

    #突出起点和终点
    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)

为突出起点,使用绿色绘制点(0,0),s=100使其比其它点大。
为突出终点,在漫步的最后一个点(x,y)处绘制一个点,将其颜色设置为红色,s=100使其比其它点大。

随机漫步图如下所示:
在这里插入图片描述
在这里插入图片描述

增加点数

创建RandomWalk实例时增大num_points的值,并在绘图时调整每个点的大小,如下所示:

#只要程序处于活动状态,就不断地模拟随机漫步
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, edgecolor='none', s=1)
    # plt.scatter(rw.x_values, rw.y_values, s=15)

    #突出起点和终点
    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 == 'n':
        break

包含50000个点的随机漫步如图所示:
在这里插入图片描述

在这里插入图片描述

隐藏坐标轴

将每条坐标轴的可见性设为False

    #隐藏坐标轴
    # plt.axes().get_xaxis().set_visible(False)
    # plt.axes().get_yaxis().set_visible(False)
    current_axes = plt.axes()
    current_axes.xaxis.set_visible(False)
    current_axes.yaxis.set_visible(False)

隐藏坐标轴的结果如图所示:
在这里插入图片描述

设置绘图窗口的尺寸

    plt.figure(figsize=(10,6))

在这里插入图片描述

可使用形参dpi向figure()传递分辨率,以有效地利用可用的屏幕空间:

    plt.figure(dpi=128, figsize=(10, 6))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DNS详解

2.4 DNS&#xff1a;因特网的目录服务 我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址&#xff0c;通过IP地址实现不同计算机之间的相互通信&#xff0c;每台联网计算机都需要通过IP地址来互相联系和分别。 但由于IP地址是由一串容易混淆的数字串构成…

Java String ,StringBuffer 和 StringBuilder 类

文章目录 一、Java String 类二、Java StringBuffer 和 StringBuilder 类总结 一、Java String 类 字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 创建字符串 创建字符串最简单的方式如下: St…

SiLu激活函数解释

SiLu激活函数 在yolo v5中&#xff0c;我们使用了SiLu激活函数 首先&#xff0c;了解一下激活函数的作用&#xff1a; 激活函数在神经网络中起到了非常重要的作用。以下是激活函数的一些主要功能&#xff1a; 引入非线性&#xff1a;激活函数的主要目标是在模型中引入非线性…

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植

使用之前RTX工程模板 RTE中RL-TCPnet配置 暂时全部默认配置&#xff0c;DHCP已打开 修改RTE_Device.h ETH配置 修改DP83822驱动 去掉文件只读属性&#xff0c;之后需要修改&#xff0c;添加到工程 修改DP83822 ID RTE创建tcp server例程&#xff0c;参考该例程&#xff0c;进…

2023.6.4 第五十六次周报

目录 前言 文献阅读&#xff1a;一种预测中国东海岸非平稳和不规则波的VMD-LSTM/GRU混合模型 背景 研究区域和数据 VMD LSTM/GRU预测模型 VMD-LSTM/GRU 方法的数值算法 序列的非平稳分析 神经网络设计 结论 代码&#xff1a;lstm预测污染物浓度 总结 前言 I read …

ChatGPT结合Excel公式办公 —— ChatGPT统计富豪信息

&#x1f4a7; C h a t G P T 统计富豪信息 \color{#FF1493}{ChatGPT统计富豪信息} ChatGPT统计富豪信息&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法…

设计原则-里氏替换原则

凡事皆有利弊&#xff0c;面向对象设计语言通过提供继承、多态等机制使得项目代码更具有复用性、可扩展性等优点&#xff0c;但是这些机制也存在一定的使用风险&#xff0c;比如继承的滥用、多态实现的不确定性等问题都有可能会引起重大线上事故。 一、里氏替换原则概念 里氏…

智能计算补充(从第四章p44往后)

智能计算补充&#xff08;从第四章p44往后&#xff09; 本文内容大部分来自于任振兴老师的讲课PPT&#xff0c;主要是对老师PPT内容的总结和提炼&#xff0c;侵权请联系我删除。 文章目录 智能计算补充&#xff08;从第四章p44往后&#xff09;适应度尺度变换1、适应度尺度变换…

DicomObjects.Core 3.0.17 Crack

DicomObjects.NET 核心版简介 DicomObjects.Core Assembly DicomObjects.NET 核心版简介 DicomObjects.Core 由一组相互关联但独立的 .核心兼容的“对象”&#xff0c;使开发人员能够快速轻松地将DICOM功能添加到其产品中&#xff0c;而无需了解或编程DICOM标准的复杂性。此帮助…

Golang 协程/线程/进程 区别以及 GMP 详解

Golang 协程/线程/进程 区别详解 转载请注明来源&#xff1a;https://janrs.com/mffp 概念 进程 每个进程都有自己的独立内存空间&#xff0c;拥有自己独立的地址空间、独立的堆和栈&#xff0c;既不共享堆&#xff0c;亦不共享栈。一个程序至少有一个进程&#xff0c;一个进程…

数据库多表设计

说明&#xff1a;在项目的数据库设计时&#xff0c;表与表之间是有联系的&#xff0c;如学生管理系统中&#xff0c;有部门表&#xff0c;教师表、学生表、课程表等等 一位教师隶属于一个部门&#xff0c;一个部门有多位教师&#xff0c;因此部门表和教师表&#xff0c;是一对…

【c++修行之路】c++11特性--上

文章目录 前言列表初始化用法介绍原理&#xff1a;std::initializer_list 简化声明的方式autodecltype 右值引用移动构造万能引用和完美转发万能引用完美转发 类的新增功能可变参数模板lambda表达式深入探究lambda表达式lambda表达式带来的便利结语 前言 大家好久不见&#xf…

bmp文件格式与保存

BMP文件由三部分组成&#xff0c;分辨是文件头&#xff0c;DIM头和像素数据。具体格式如下&#xff1a; 基本介绍 1. 文件头 14个字节 signature&#xff1a; 为文件标志位&#xff0c;恒为0X42 FileSize&#xff1a;是指整个文件的大小 REservedx&#xff1a;保留位恒为0 …

leetcode700. 二叉搜索树中的搜索(java)

二叉搜索树中的搜索 leetcode700 二叉搜索树中的搜索题目描述 解题思路代码演示二叉树专题 leetcode700 二叉搜索树中的搜索 leetcode 700 二叉搜索树中的搜索。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/search-i…

chatgpt赋能python:Python去掉GIL:提升Python多线程编程性能的突破口

Python去掉GIL&#xff1a;提升Python多线程编程性能的突破口 Python 是世界上最受欢迎的编程语言之一&#xff0c;其中一大原因是其简单易用、优雅简洁的语法。Python 也是一个卓越的多用途编程语言&#xff0c;广泛应用于 Web 开发、科学计算、人工智能等领域。但是&#xf…

javaScript蓝桥杯-----宝贵的一票

目录 一、介绍二、准备三、目标四、代码五、检测踩坑&#xff01;&#xff01;六、完成 一、介绍 公司经常举办各种活动&#xff0c;但一到投票环节就犯了难&#xff0c;于是公司决定安排小蓝开发一个投票系统&#xff0c;更好的收集大家的投票信息。为了赶在下一次活动开始前…

k8s亲和性和反亲和性

1.前言 k8s的亲和性和反亲和性都是通过标签来影响pod的调度&#xff0c;在此基础上亲和性又分为硬亲和性和软亲和性&#xff0c;required为硬亲和性即标签内容必须要符合才能调度&#xff0c;preferred为软亲和性即标签内容不一定要符合也能调度&#xff0c;除此之外还有node亲…

Unsupported major.minor version 51.0解决办法

先看看我的报错截图 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 08:51 min [INFO] Finished at: 2023-0…

[2.0快速体验]Apache Doris 2.0 日志分析快速体验

1. 概述 应用程序、服务器、云基础设施、IoT 和移动设备、DevOps、微服务架构—最重要的业务和 IT 发展趋势帮助我们以前所未有的方式优化运维和客户体验。但这些趋势也导致由机器生成的数据出现爆炸式成长&#xff0c;其中包括日志和指标等&#xff0c;例如&#xff0c;用户交…

Qcon 广州主题演讲:融云实时社区的海量消息分发实践

移步公众号文章 预约纸质版《作战地图》 5 月 26 日-27 日&#xff0c;QCon 全球软件开发大会落地广州。关注【融云全球互联网通信云】了解更多 融云 IM 服务架构师罗伟受邀分享“实时社区的海量消息分发实践”&#xff0c;从实践中来的前沿技术分享&#xff0c;收获现场开发者…