最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)的過程(注意要確定移動(dòng)的次數(shù),比如10萬(wàn)次),每次行走都完全是隨機(jī)的,沒有明確的方向,結(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   注意使用過程中的細(xì)微差別 ,小寫開頭的rand_moving是文件(或稱為模塊,一個(gè)模塊中可以有一個(gè)類,或多個(gè)類),大寫開頭Rand_moving是類。

rm = Rand_moving()  # 利用導(dǎo)入的 Rand_moving 類,創(chuàng)建一個(gè)實(shí)例rm,這里沒有給定參數(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),如果一直沒顯示,請(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',見后面修改起點(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注意使用過程中的差別

rm = Rand_moving()  # 創(chuàng)建一個(gè)實(shí)例rm,這里沒有給定參數(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開始語(yǔ)句的前面,才能調(diào)整顯示屏幕的大小。

import matplotlib.pyplot as plt

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

rm = Rand_moving()  # 創(chuàng)建一個(gè)實(shí)例rm,這里沒有給定參數(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?ctypes庫(kù)底層交互秘籍實(shí)例探究

    Python?ctypes庫(kù)底層交互秘籍實(shí)例探究

    ctypes是Python標(biāo)準(zhǔn)庫(kù)中的外部函數(shù)庫(kù),允許Python調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù),它提供了與C兼容的數(shù)據(jù)類型和允許Python調(diào)用共享庫(kù)中的函數(shù),對(duì)系統(tǒng)級(jí)編程和與硬件交互非常有用
    2024-01-01
  • Python數(shù)據(jù)分析之獲取雙色球歷史信息的方法示例

    Python數(shù)據(jù)分析之獲取雙色球歷史信息的方法示例

    這篇文章主要介紹了Python數(shù)據(jù)分析之獲取雙色球歷史信息的方法,涉及Python網(wǎng)頁(yè)抓取、正則匹配、文件讀寫及數(shù)值運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • python中異常的傳播詳解

    python中異常的傳播詳解

    大家好,本篇文章主要講的是python中異常的傳播詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 5款實(shí)用的python 工具推薦

    5款實(shí)用的python 工具推薦

    工欲善其事必先利其器,一個(gè)好的工具能讓起到事半功倍的效果,Python 社區(qū)提供了足夠多的優(yōu)秀工具來(lái)幫助開發(fā)者更方便的實(shí)現(xiàn)某些想法,下面這幾個(gè)工具給我的工作也帶來(lái)了很多便利,推薦給追求美好事物的你。
    2020-10-10
  • 使用grpc實(shí)現(xiàn)golang后端和python服務(wù)間通信

    使用grpc實(shí)現(xiàn)golang后端和python服務(wù)間通信

    gRPC是Google 開發(fā)的高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,本文主要為大家詳細(xì)介紹了如何使用grpc實(shí)現(xiàn)golang后端和python服務(wù)間通信,感興趣的可以了解下
    2024-03-03
  • 基于Python創(chuàng)建可定制的HTTP服務(wù)器

    基于Python創(chuàng)建可定制的HTTP服務(wù)器

    這篇文章主要為大家演示一下如何使用?http.server?模塊來(lái)實(shí)現(xiàn)一個(gè)能夠發(fā)布網(wǎng)頁(yè)的應(yīng)用服務(wù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-05-05
  • Python淺析生成器generator的使用

    Python淺析生成器generator的使用

    生成器generator在循環(huán)過程中,按照某種算法推算數(shù)據(jù),不必創(chuàng)建容器存儲(chǔ)完整的結(jié)果,從而節(jié)省內(nèi)存空間。數(shù)據(jù)量越大,優(yōu)勢(shì)越明顯。以上作用也稱之為延遲操作或惰性操作,通俗的講就是在需要的時(shí)候才計(jì)算結(jié)果,而不是一次構(gòu)建出所有結(jié)果
    2022-07-07
  • Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過python腳本實(shí)現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進(jìn)后退、頁(yè)面刷新等,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • 如何用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型

    如何用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型

    這篇文章主要介紹了用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型,在這里我將主要討論P(yáng)yTorch建模的相關(guān)方面,作為一點(diǎn)額外的內(nèi)容,我還將演示PyTorch中開發(fā)的模型的神經(jīng)元重要性,需要的朋友可以參考下
    2023-03-03
  • Python中decimal.Decimal類型和float類型的比較

    Python中decimal.Decimal類型和float類型的比較

    這篇文章主要介紹了Python中decimal.Decimal類型和float類型的比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

资阳市| 禹城市| 黔西| 金堂县| 河北省| 柳林县| 彭泽县| 柳林县| 巴彦淖尔市| 元谋县| 红安县| 桑植县| 且末县| 彭山县| 平湖市| 平遥县| 南康市| 石屏县| 兴隆县| 乐安县| 林芝县| 淳安县| 河南省| 寻乌县| 合作市| 谷城县| 黄冈市| 阳西县| 深州市| 眉山市| 恩平市| 麟游县| 天津市| 淮滨县| 册亨县| 晋中市| 廊坊市| 洛川县| 达日县| 定边县| 济南市|