程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python可視化——隨機漫步

編輯:Python

隨機漫步

隨機漫步實現主要有以下兩個步驟
(1)python確定每次迭代後的落腳點坐標(該坐標是隨機的),將每次生成的落腳點坐標存入列表。
(2)利用matplotlib中的散點圖繪制隨機漫步圖形。

隨機漫步在現實中都具有實際的用途:漂浮在水滴上的花粉因不斷受到水分子的擠壓而在水面上移動。水滴中的分子運動是隨機的,因此花粉在水面上的運動路徑猶如隨機漫步。

(1)python實現隨機漫步(算法模塊)

#需先導入random包當中的choice函數
#choice()方法將實現從列表,元組或字符串中返回一個隨機的項目
from random import choice
#創建一個用於實現隨機漫步的RandomWalk類
class RandomWalk():
"""一個生成隨機漫步數據的類"""
def __init__(self, num_points=5000):#默認迭代5000次
"""初始化隨機漫步的屬性"""
#存儲隨機漫步次數的變量
self.num_points = num_points #默認值為5000
#兩個列表存儲隨機漫步經過的每個點的x和y坐標
# 所有隨機漫步都始於(0, 0)
self.x_values = [0]
self.y_values = [0]
#為做出隨機決策,我們將所有可能的選擇都存儲在一個列表中,並在每次做決策時都使用choice()來決定使用哪種選擇。
# 接下來,我們將隨機漫步包含的默認點數設置為5000,這大到足以生成有趣的模式,同時又足夠小,可確保能夠快速地模擬隨機漫步。
# 然後,我們創建了兩個用於存儲x和y值的列表,並讓每次漫步都從點(0, 0)出發。
#選擇移動方向
#利用fill_walk()來生成漫步包含的點,並決定每次漫步的方向
def fill_walk(self):#隨機漫步,自定義行進路徑
"""計算隨機漫步包含的所有點"""
# 不斷漫步,直到列表達到指定的長度
while len(self.x_values)<self.num_points:
#決定前進方向以及沿這個方向前進的距離
#x軸方向
x_direction = choice([1, -1])#方向
x_distance = choice([0, 1, 2, 3, 4])#距離
x_step = x_direction * x_distance#前進or後退的距離
#y軸方向
y_direction = choice([1, -1]) #向右走為1 向左走為-1
y_distance = choice([0, 1, 2, 3, 4]) #規范前進步數0-4步
y_step = y_direction * y_distance
# 拒絕原地踏步
if x_step == 0 and y_step == 0:
continue
# 計算下一個點的x和y值 self.x_values[-1] #每次都取最後一個數
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
#將移動的每個坐標都進行記錄
self.x_values.append(next_x)#添加進入x軸坐標位置
self.y_values.append(next_y)#添加進入y軸坐標位置

(2)可視化呈現隨機漫步結果
#繪制隨機漫步圖

# 創建一個RandomWalk實例,並將其包含的點都繪制出來
def show_RandomWalk():
rw = RandomWalk(5000) #新建實例化 迭代5000次
rw.fill_walk()
#開始繪制漫步圖(在繪圖之前,所有點的行走都已完成)
#采用顏色映射
plt.scatter(rw.x_values,rw.y_values,c=rw.y_values,cmap=plt.cm.Greens,s=20)
plt.show()


【項目拓展】:
模擬多次隨機漫步
【邏輯思路】:利用狀態變量,把所有的代碼都放在一個while恆真循環中,通過break結束while循環,決定隨機漫步是否繼續進行。

def show_continue():
#只要程序處於活動狀態,就不斷地模擬隨機漫步 繪制散點圖的隨機漫步
while True:#采用恆真循環
# 創建一個RandomWalk實例,並將其包含的點都繪制出來
rw = RandomWalk()
#隨機漫步確定落腳點
rw.fill_walk()
#開始畫圖
# 設置繪圖窗口的尺寸 函數figure()用於指定圖表的寬度、高度、分辨率和背景色。你需要給形參figsize指定一個元組,向matplotlib指出繪圖窗口的尺寸,單位為英寸。
plt.figure(dpi=128,figsize=(10, 6))
#figsize參數 設置窗口大小 尺寸形式應為元組形式 (長,寬) 傳遞參數
#dpi參數 設置圖像分辨率
#生成數字列表,其中包含的數字個數與漫步包含的點數相同。
#以便後面使用它來設置每個漫步點的顏色,以顯示繪制點的前後順序。
point_numbers = list(range(rw.num_points))
#繪圖 並顯示繪制點的前後順序
plt.scatter(rw.x_values, rw.y_values,c=point_numbers,cmap=plt.cm.Blues,s=15,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) #終點
# 隱藏坐標軸
#隱藏雙側坐標軸
plt.axis('off')
#隱藏單軸不可見
# plt.gca().get_xaxis().set_visible(False) #x軸
# plt.gca().get_yaxis().set_visible(False)#y軸
# 設置每個坐標軸的取值范圍 設置坐標軸范圍
# plt.axis([0, 1100, 0, 1100000])
#顯示
plt.show()
#詢問是否繼續行進
keep_running = input("Make another walk? (y/n): ")
if keep_running == 'n':#退出循環
break

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved