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

创建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

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

给点着色

使用颜色映射指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让颜色更明显。将参数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

效果如下:

突出起点和终点

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

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

效果如下:

增加点数

增加点数,以提供更多的数据,我们在创建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

效果如下:

调整尺寸以适用屏幕

图表适合屏幕大小时,更能有效地将数据中的规律呈现出来。函数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 随机漫步内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python3随机漫步生成数据并绘制

    本文为大家分享了Python3随机漫步生成数据并绘制的具体代码,供大家参考,具体内容如下 random_walk.py from random import choice #生成随机漫步的数据类 class RandomWalk(): def __init__(self,num_points=5000): #初始化随机漫步的属性 self.numpoints=num_points #随机漫步的默认点数 self.x_values=[0] #所有的随机漫步都始于(0.0) self.y_value

  • python实现随机漫步算法

    本文实例为大家分享了python实现随机漫步的具体代码,供大家参考,具体内容如下 编写randomwalk类 from random import choice class randomwalk(): def __init__(self,num_points=5000): self.num_points=num_points self.x_values=[0] self.y_values=[0] def fill_walk(self): while len(self.x_values)<self

  • python实现随机漫步方法和原理

    我们通过模拟随机漫步可以说明如何运用数组运算.通过内置的random模块以纯Python的方式实现1000步的随机漫步 根据前100个随机漫步值生成的折线图, plt.plot(walk[:100]) 随机漫步中各步的累计和,可以用一个数组运算来实现.因此,我用np.random模块一次性随机产生1000个"掷硬币"结果(即两个数中任选一个),将其分别设置为1或-1,然后计算累计和 我们就可以沿着漫步路径做一些统计工作了,比如求取最大值和最小值 假设我们想要知道本次随机漫步需要多久才能

  • Python实现随机漫步功能

    随机漫步生成是无规则的,是系统自行选择的结果.根据设定的规则自定生成,上下左右的方位,每次所经过的方向路径. 首先,创建一个RandomWalk()类和fill_walk()函数 random_walk.py from random import choice class Randomwalk (): '''一个生成随机数漫步的类''' def __init__(self,num_point=5000): '''初始化随机漫步的属性''' self.num_point = num_point #

  • Python使用matplotlib绘制随机漫步图

    本文我们来做一个简单的随机漫步数据图,进一步了解matplotlib的使用, 使用Python生成随机漫步数据,再使用matplotlib绘制出来, 随机漫步是这样行走得到的路径: 每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的. 创建一个RandomWalk雷,随机的选择前进的方向,一共有三个属性,一个是存储随机漫步次数的变量,其他两个是列表,分别存储随机漫步经过的每个点的x和y坐标 下面是代码 from random import choice class Random

  • python散点图实例之随机漫步

    随机漫步是这样行走得到的途径:每次行走都是完全随机的,没有明确的方向,结果是由一系列随机决策决定的. random_walk.py #random_walk.py from random import choice # -*- coding: utf-8 -*- class RandomWalk(): #一个生成随机漫步数据的类 def __init__(self,num_points=5000): self.num_points=num_points self.x_values=[0] sel

  • python3.5绘制随机漫步图

    本文实例为大家分享了python3.5绘制随机漫步图的具体代码,供大家参考,具体内容如下 代码中我们定义两个模型,一个是RandomWalk.py模型,用于随机的选择前进方向.此模型中的RandomWalk类包含两个方法,一个是__init__(),一个是fill_walk(),后者是计算随机漫步的所有点.另外一个是rw_visual.py模型,用于绘制随机漫步图. 代码如下: RandomWalk.py from random import choice class RandomWalk():

  • python使用matplotlib库生成随机漫步图

    本教程使用python来生成随机漫步数据,再使用matplotlib将数据呈现出来 开发环境 操作系统: Windows10 IDE: Pycharm 2017.1.3 Python版本: Python3.6 Python第三方库:matplotlib 开始实战 1. 创建RandomWalk()类 为了模拟随机漫步,我们将创建一个名为RandomWalk的类, 它随机地选择方向. from random import choice class RandomWalk(): ""&quo

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

    创建RandomWalk类 为模拟随机漫步,我们将创建一个RandomWalk类,随机选择前进方向,这个类有三个属性,一个存储随机漫步的次数,另外两个存储随机漫步的每个点的x,y坐标,每次漫步都从点(0,0)出发 from random import choice class RandomWalk(): '''一个生成随机漫步数据的类''' def __init__(self,num_points=5000): '''初始化随机漫步的属性''' self.num_points = num_poi

  • python超详细实现字体反爬流程

    目录 查策实战场景 字体实战解码 字体反爬编码时间 查策实战场景 本次要采集的目标站点是查策,该测试站点如下所示. 目标站点网址如下 www.chacewang.com/chanye/news?newstype=sbtz 该站点的新闻资讯类信息很容易采集,通过开发者工具查看了一下,并不存在加密反爬. 但字体反爬还是存在的,案例寻找过程非常简单,只需要开发者工具切换到网络,字体视图,然后预览一下字体文件即可. 可以看到仅数字进行了顺序变换. 接下来就是实战解码的过程,可以通过 FontCreato

  • Python超详细讲解元类的使用

    目录 类的定义 一.什么是元类 二.注意区分元类和继承的基类 三.type 元类的使用 四.自定义元类的使用 类的定义 对象是通过类创建的,如下面的代码: # object 为顶层基类 class Work(object): a = 100 Mywork = Work() # 实例化 print(Mywork ) # Mywork 是 Work 所创建的一个对象 <__main__.Work object at 0x101eb4630> print(type(Mywork)) # <cl

  • windows安装python超详细图文教程

    一.下载安装包 官网下载:python 3.6.0 打开链接滑到页面最下方 二. 开始安装 1.双击下载好的安装文件python-3.6.0-amd64.exe Install Now :默认安装 Customize Installation:自定义安装 Add Python 3.6 to PATH: 将python 加入环境变量 2.勾选Add Python 3.6 to PATH后,选择Customize Installation自定义安装 3.点击Next进行下一步 Install for

  • python超详细实现完整学生成绩管理系统

    目录 学生成绩管理系统简介 源代码 students.txt main.py Login.py db.py MenuPage.py view.py 学生成绩管理系统简介 一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据) 源代码 仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准) students.txt 用于存储数据 main.py from tkinter import * from Login imp

  • Python超详细讲解内存管理机制

    目录 什么是内存管理机制 一.引用计数机制 二.数据池和缓存 什么是内存管理机制 python中创建的对象的时候,首先会去申请内存地址,然后对对象进行初始化,所有对象都会维护在一 个叫做refchain的双向循环链表中,每个数据都保存如下信息: 1. 链表中数据前后数据的指针 2. 数据的类型 3. 数据值 4. 数据的引用计数 5. 数据的长度(list,dict..) 一.引用计数机制 引用计数增加: 1.1 对象被创建 1.2 对象被别的变量引用(另外起了个名字) 1.3 对象被作为元素,

  • Python numpy之线性代数与随机漫步

    目录 线性代数 伪随机数生成 随即漫步 示例 线性代数 线性代数,矩阵计算,优化与内存:比如矩阵乘法,分解,行列式等数学知识,是所有数组类库的重要组成部分.和MATLAB等其他语言相比,numpy的线性代数中有所不同的是矩阵相乘不是点积运算而是逐个元素计算,因此在numpy里面都有一个特定的函数来计算,它就是dot, 语法如下: numpy之线性代数函数 diag 将一个方阵的对角(或非对角)元素作为一维数组返回,或者将一个一维数转换为一个方阵,并且在非对角线上有零点 dot 矩阵点乘 trac

  • Android Activity的生命周期与加载模式超详细图文解析

    目录 Activity的生命周期 Activity的加载模式 Activity的生命周期 Activity是安卓应用的重要组成单元之一,其对于安卓的作用类似于Servlet对于Web应用的作用. 整个Activity生命周期的图解如下 具体的生命周期可以总结成如下几个步骤 onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,如创建View,绑定数据和恢复数据. onStart():当Activity显示在屏幕上时,函数被调用. onRestart(

  • python爬虫scrapy基本使用超详细教程

    一.介绍 官方文档:中文2.3版本 下面这张图大家应该很熟悉,很多有关scrapy框架的介绍中都会出现这张图,感兴趣的再去查询相关资料,当然学会使用scrapy才是最主要的. 二.基本使用 2.1 环境安装 1.linux和mac操作系统: pip install scrapy 2.windows系统: 先安装wheel:pip install wheel 下载twisted:下载地址 安装twisted:pip install Twisted‑17.1.0‑cp36‑cp36m‑win_amd

随机推荐