欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+matplotlib調(diào)用隨機(jī)函數(shù)生成變化圖形

 更新時(shí)間:2022年04月26日 11:07:19   作者:PursuitingPeak  
這篇文章主要介紹了如何在Python中利用隨機(jī)函數(shù)生成變化的圖形,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定吧參考價(jià)值,需要的可以了解一下

前言

綜合前述的類、函數(shù)、matplotlib等,完成一個(gè)隨機(jī)移動(dòng)的過(guò)程(注意要確定移動(dòng)的次數(shù),比如10萬(wàn)次),每次行走都完全是隨機(jī)的,沒(méi)有明確的方向,結(jié)果是由一系列隨機(jī)決策確定的,最后顯示出每次移動(dòng)的位置的圖表。

思考:

1)每次走動(dòng)多少個(gè)像素,由隨機(jī)函數(shù)決定,每次移動(dòng)方向也隨機(jī)確定。由隨機(jī)方向和隨機(jī)像素共同移動(dòng)位置大小和方向。

2)保證將每次移動(dòng)的位置保存在列表中,供后面matplotlib調(diào)用,生成圖表。

故而,可以分成兩個(gè)文件,一個(gè)為rand_moving類,生成走動(dòng)像素、方向,并記錄相關(guān)數(shù)據(jù),保存在數(shù)列中,另一個(gè)為繪圖模塊randdraw_visual ,調(diào)用matplotlib和rand_moving類,生成一個(gè)實(shí)例,并調(diào)用計(jì)算出的數(shù)列組生成圖表。

一、rand_moving.py文件定義功能如下

1、初始化程序,設(shè)置一個(gè)參數(shù),即移動(dòng)的次數(shù),初始化位置全部設(shè)置為0

2、隨機(jī)生成x,y的方向和移動(dòng)像素,并相乘,得到相對(duì)移動(dòng)距離,即為每次移動(dòng)的距離和方向,即需要4個(gè)隨機(jī)函數(shù)來(lái)分別確定水平方向和垂直方向的 移動(dòng)位置大小和方向,

3,計(jì)算出下一個(gè)位置,并進(jìn)行保存到位置數(shù)列中,即每走完一步后,在屏幕中的絕對(duì)位置。

如下: 

from random import choice  #random是系統(tǒng)自帶的隨機(jī)函數(shù)模塊

class Rand_moving(): #定義一個(gè)Rand_moving類
    def __init__(self,num_times=100000):  # 初始化,設(shè)置默認(rèn)參數(shù)為10萬(wàn),可以修改這個(gè)參數(shù)試試機(jī)器運(yùn)行速度
        self.num_times = num_times  #移動(dòng)次數(shù)
        
        self.x_values=[0]   # 設(shè)置兩個(gè)數(shù)列,用來(lái)保存每一步的位置,初始位置為(0, 0),數(shù)列元素個(gè)數(shù)會(huì)一直增加到num_times,用來(lái)記錄每一步的位置信息
        self.y_values=[0]    
        
    def fill_moving(self):  #定義一個(gè)函數(shù),用來(lái)計(jì)算移動(dòng)方向和距離,并計(jì)算需要保存的位置信息
        while len(self.x_values)<self.num_times:#循環(huán)不斷運(yùn)行,直到漫步包含所需數(shù)量的點(diǎn)num_times
           
            x_direction = choice([1,-1])       #x的移動(dòng)方向,1向上,0不變,-1向下
            x_distance = choice([0,1,2,3,4,5]) #x的每次移動(dòng)的像素,
            x_step = x_direction*x_distance    #移動(dòng)方向乘以移動(dòng)距離,以確定沿x移動(dòng)的距離
            
            y_direction =  choice([1,-1])      #y的移動(dòng)方向,1向上,0不變,-1向下
            y_distance = choice([0,1,2,3,4,5]) #y的每次移動(dòng)的像素,
            y_step = y_direction*y_distance    #移動(dòng)方向乘以移動(dòng)距離,以確定沿y移動(dòng)的距離
            
            #原地不變
            if x_step ==0 and y_step==0:  # x_step和 y_step都為零,則意味著原地踏步
                continue
            
            #計(jì)算下一個(gè)點(diǎn)的位置坐標(biāo)x和y值,并分別保存到數(shù)列x_values和y_values中
            next_x = self.x_values[-1] + x_step  #self.x_values[-1]表示是數(shù)列最后一個(gè)值,初始為x_values=[0]
            next_y = self.y_values[-1] + y_step   
            
            self.x_values.append(next_x ) #將每次計(jì)算的next_x存入到數(shù)列x_values中
            self.y_values.append(next_y ) #將每次計(jì)算的next_y存入到數(shù)列y_values中

二、繪圖模塊

randdraw_visual.py

繪圖模塊randdraw_visual.py的功能如下:

1、調(diào)用matplotlib和rand_moving類;

2、rand_moving生成一個(gè)實(shí)例,并計(jì)算出的數(shù)列組生成圖表;

3、用matplotlib中的方法生成圖表

import matplotlib.pyplot as plt  #導(dǎo)入matplotlib模塊

from rand_moving import *   #也可以用 import random_moving   注意使用過(guò)程中的細(xì)微差別 ,小寫(xiě)開(kāi)頭的rand_moving是文件(或稱為模塊,一個(gè)模塊中可以有一個(gè)類,或多個(gè)類),大寫(xiě)開(kāi)頭Rand_moving是類。

rm = Rand_moving()  # 利用導(dǎo)入的 Rand_moving 類,創(chuàng)建一個(gè)實(shí)例rm,這里沒(méi)有給定參數(shù),默認(rèn)是10萬(wàn),可以修改為其他數(shù)據(jù)。
rm.fill_moving()    # 調(diào)用類的方法fill_moving() ,并生成隨機(jī)數(shù)列,存入到x_values和y_values中,

plt.scatter(rm.x_values, rm.y_values,s=15)#調(diào)用實(shí)例rm中位置數(shù)列x_values和y_values生成圖表
plt.show()

程序運(yùn)行效果(注意,為了對(duì)比,程序中創(chuàng)建了3個(gè)實(shí)例,其中一個(gè)為默認(rèn)值,另兩個(gè)為50萬(wàn)和5萬(wàn),如果一直沒(méi)顯示,請(qǐng)耐心等會(huì)兒!)

上述三個(gè)實(shí)例處在同一圖中,呈現(xiàn)不同顏色,如果只有一個(gè)實(shí)例,如何修改顏色?

入門(1)中,語(yǔ)句 plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues,edgecolor='none', s=40) 是修改漸變色的,可償試將randdraw_visual.py模塊中進(jìn)行如下修改:

plt.scatter(rm.x_values, rm.y_values,c=y_values, cmap=plt.cm.Reds,edgecolor='none',s=15)

注: c的參數(shù)是字符串,可以直接使用顏色的英文進(jìn)行賦值,比如:c='yellow',見(jiàn)后面修改起點(diǎn)、終點(diǎn)顏色。

指定一個(gè)紅色,一個(gè)藍(lán)色,實(shí)際運(yùn)行效果(有重復(fù)的地方,實(shí)例設(shè)置為藍(lán)色在后面,將紅色蓋?。?/p>

除些之外,還可以對(duì)特定的點(diǎn)進(jìn)行設(shè)定,也就是在語(yǔ)句plt.scatter(rm.x_values, rm.y_values,c=y_values, cmap=plt.cm.Reds,edgecolor='none',s=15)之后,再多幾個(gè)相關(guān)語(yǔ)句,并給定相關(guān)點(diǎn)坐標(biāo)。

import matplotlib.pyplot as plt

from rand_moving import *   #也可以用import random_moving注意使用過(guò)程中的差別

rm = Rand_moving()  # 創(chuàng)建一個(gè)實(shí)例rm,這里沒(méi)有給定參數(shù),默認(rèn)是10萬(wàn),可以修改為其他數(shù)據(jù)。
rm.fill_moving()    # 調(diào)用類的方法fill_moving() ,并生成隨機(jī)數(shù)列,存入到x_values和y_values中
plt.scatter(rm.x_values,rm.y_values,c=rm.y_values,cmap=plt.cm.Reds,edgecolor='none',s=15)
#調(diào)用實(shí)例rm中數(shù)列x_values和y_values生成圖表#調(diào)用實(shí)例rm中數(shù)列x_values和y_values生成圖表

new_rm = Rand_moving(500000)  # 創(chuàng)建一個(gè)實(shí)例new_rm,是50萬(wàn)次
new_rm.fill_moving()   
plt.scatter(new_rm.x_values,new_rm.y_values,c=new_rm.y_values, cmap=plt.cm.Blues,edgecolor='none',s=15)

# 重繪起點(diǎn),終點(diǎn)
#因?yàn)閮蓚€(gè)實(shí)例的起點(diǎn)一樣,只需一個(gè)起點(diǎn)即可
plt.scatter(rm.x_values[0], rm.y_values[0],c='yellow',edgecolor='none',s=100)   #設(shè)置起點(diǎn),把s設(shè)置較大,以示區(qū)別
#兩個(gè)實(shí)例終點(diǎn)不同,分別重繪終點(diǎn)位置 
plt.scatter(rm.x_values[-1], rm.y_values[-1],c='brown',edgecolor='none',s=100)  #設(shè)置實(shí)例rm的終點(diǎn),思考為什么用[-1]
plt.scatter(new_rm.x_values[-1], new_rm.y_values[-1],c='pink',edgecolor='none',s=100) #設(shè)置實(shí)例new_rm的終點(diǎn)

plt.show()

實(shí)際運(yùn)行效果:

顯示圖表屏幕大小

圖表適合屏幕大小能有效地將數(shù)據(jù)中的規(guī)律呈現(xiàn)出來(lái),如果要調(diào)整屏幕大小,可調(diào)整matplotlib輸出的尺寸

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

函數(shù) figure() 用于指定圖表的寬度、高度、分辨率和背景色。

形參 figsize 指定一個(gè)元組

形參 dpi 向 figure() 傳遞該分辨率

注意:plt.figure(dpi=128,figsize=(12, 10))語(yǔ)句要在其他plt開(kāi)始語(yǔ)句的前面,才能調(diào)整顯示屏幕的大小。

import matplotlib.pyplot as plt

from rand_moving import *   #也可以用import random_moving注意使用過(guò)程中的差別
#調(diào)整屏幕大小
plt.figure(dpi=128,figsize=(12, 10))  #一開(kāi)始就要定義顯示的大小,當(dāng)然,可以試一下,放到plt.show()之前其他位置的運(yùn)行效果。

rm = Rand_moving()  # 創(chuàng)建一個(gè)實(shí)例rm,這里沒(méi)有給定參數(shù),默認(rèn)是10萬(wàn),可以修改為其他數(shù)據(jù)。
rm.fill_moving()    # 調(diào)用類的方法fill_moving() ,并生成隨機(jī)數(shù)列,存入到x_values和y_values中
plt.scatter(rm.x_values,rm.y_values,c=rm.y_values,cmap=plt.cm.Reds,edgecolor='none',s=15)
#調(diào)用實(shí)例rm中數(shù)列x_values和y_values生成圖表#調(diào)用實(shí)例rm中數(shù)列x_values和y_values生成圖表

new_rm = Rand_moving(500000)  # 創(chuàng)建一個(gè)實(shí)例new_rm,是50萬(wàn)次
new_rm.fill_moving()   
plt.scatter(new_rm.x_values,new_rm.y_values,c=new_rm.y_values, cmap=plt.cm.Blues,edgecolor='none',s=15)

plt.show()

當(dāng)然,還可以試一下他函數(shù)功能。 

是不是有點(diǎn)小小的成就感!

小結(jié)

請(qǐng)思考:

1、上述程序是否能進(jìn)行優(yōu)化(比如功能相同的)

2、創(chuàng)建三個(gè)3個(gè)實(shí)例,用了3個(gè)語(yǔ)句,能否建一個(gè)函數(shù),只輸入一個(gè)數(shù)n,就自動(dòng)創(chuàng)建n個(gè)實(shí)例?同時(shí),每個(gè)實(shí)例的num_times隨機(jī),(n比較大時(shí),num_times應(yīng)該比較小)

3、當(dāng)實(shí)現(xiàn)上述功能后,程序運(yùn)行,只輸入一個(gè)參數(shù)(創(chuàng)建實(shí)例的個(gè)數(shù)),就會(huì)自動(dòng)生成對(duì)應(yīng)的num_times,并分別調(diào)用相關(guān)函數(shù)生成對(duì)應(yīng)圖表。

以上就是Python+matplotlib調(diào)用隨機(jī)函數(shù)生成變化圖形的詳細(xì)內(nèi)容,更多關(guān)于Python隨機(jī)函數(shù)生成變化圖形的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python列表的構(gòu)造方法list()

    python列表的構(gòu)造方法list()

    這篇文章主要介紹了python列表的構(gòu)造方法list(),python中沒(méi)有數(shù)組這個(gè)概念,與之相應(yīng)的是列表,本篇文章就來(lái)說(shuō)說(shuō)列表這個(gè)語(yǔ)法,下面文章詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡(jiǎn)單處理和分析

    python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡(jiǎn)單處理和分析

    這篇文章主要介紹了python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡(jiǎn)單處理和分析的實(shí)例,幫助大家更好的理解和學(xué)習(xí)使用python。感興趣的朋友可以了解下
    2021-04-04
  • 用Python寫(xiě)一段用戶登錄的程序代碼

    用Python寫(xiě)一段用戶登錄的程序代碼

    下面小編就為大家分享一篇用Python寫(xiě)一段用戶登錄的程序代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • ConvNeXt實(shí)戰(zhàn)之實(shí)現(xiàn)植物幼苗分類

    ConvNeXt實(shí)戰(zhàn)之實(shí)現(xiàn)植物幼苗分類

    ConvNeXts由標(biāo)準(zhǔn)ConvNet模塊構(gòu)建,在準(zhǔn)確性和可擴(kuò)展性方面與 Transformer競(jìng)爭(zhēng),實(shí)現(xiàn)87.8% ImageNet top-1 準(zhǔn)確率,在 COCO 檢測(cè)和 ADE20K 分割方面優(yōu)于 Swin Transformers。本文將利用ConvNeXt實(shí)現(xiàn)植物幼苗分類,需要的可以參考一下
    2022-01-01
  • Python?對(duì)象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例

    Python?對(duì)象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例

    這篇文章主要介紹了Python?對(duì)象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • python使用SMTP發(fā)送qq或sina郵件

    python使用SMTP發(fā)送qq或sina郵件

    這篇文章主要為大家詳細(xì)介紹了python使用SMTP發(fā)送qq或sina郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 在matplotlib中改變figure的布局和大小實(shí)例

    在matplotlib中改變figure的布局和大小實(shí)例

    這篇文章主要介紹了在matplotlib中改變figure的布局和大小實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python+numpy實(shí)現(xiàn)的基本矩陣操作示例

    python+numpy實(shí)現(xiàn)的基本矩陣操作示例

    這篇文章主要介紹了python+numpy實(shí)現(xiàn)的基本矩陣操作,結(jié)合實(shí)例形式分析了Python使用numpy模塊針對(duì)矩陣進(jìn)行創(chuàng)建、增刪查改、索引、運(yùn)算相關(guān)操作實(shí)現(xiàn)技巧,注釋中包含有詳細(xì)的說(shuō)明,需要的朋友可以參考下
    2019-07-07
  • selenium python瀏覽器多窗口處理代碼示例

    selenium python瀏覽器多窗口處理代碼示例

    這篇文章主要介紹了selenium python瀏覽器多窗口處理代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python中Jupyter notebook快捷鍵總結(jié)

    Python中Jupyter notebook快捷鍵總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Python中Jupyter notebook快捷鍵總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04

最新評(píng)論