【Python】隨機漫步


創建Randomwalk()類

我們將使用Python來生成隨機漫步數據,再使用matplotlib以引入矚目的方式將這些數據呈現出來

首先創建類Randomwalk()

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)

__init__()和fill_walk(),其中后者計算隨機漫步經過的所有點。

我們使用choice([1,-1])給direction選擇一個值,結果要么是表示向右走1,要么表示向左走-1,接下來,choice([0,1,2,3,4])隨機的選擇一個0~4之間的整數,告訴Python沿着指定的方向走多遠(x_distance)

繪制隨機漫步圖

import matplotlib.pyplot as plt
from matplotlib_test.random_walk import RandomWalk

#創建一個RandomWalk實例,並將其包含的點都繪制出來
rw = RandomWalk()
rw.fill_walk()
print(rw.x_values)
plt.scatter(rw.x_values,rw.y_values,s=15)
plt.show()

運行結果:

image

我們首先導入模塊pyplot和Randomwalk類,然后我們創建一個實例,並將其存儲到rw中,再調用fill_walk(),我們將隨機漫步的x與y值傳遞給scatter(),並選擇了合適的點尺寸,顯示包含5000個點的隨機漫步。

模擬多次隨機漫步

import matplotlib.pyplot as plt
from matplotlib_test.random_walk import RandomWalk
#只要程序處理活動狀態,就不斷的隨機模擬
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

這些代碼模擬一次隨機漫步,在matplotlib查看器中顯示結果,再不關閉查看器的情況下暫停。如果你關閉了查看器,程序詢問你是否再模擬一次隨機漫步,如果你輸入y,那么將繼續,如果你輸入n,那么將退出。

設置隨機漫步圖樣式

1.給點着色

image

我們使用顏色映射來指出個點的先后順序,並刪除每個點的黑色輪廓,讓他們的顏色更明顯,為根據漫步中各點的先后順序進行着色,我們傳遞參數c,並將其設置為一個列表,其中包含個點的先后順序。

運行結果:

image

2.重新繪制起點與終點

為了凸顯上圖的起點跟終點,我們可以這么做

image

運行結果:

image

3.隱藏坐標軸

為了修改坐標軸,使用函數plt.axes()來將坐標軸的可見性設置為False

image

運行結果:

image

4.增加點數

下面我們增加點數,在創建RandomWalk實例時增大num_points的值

image

運行結果:

image

5.調整窗口的尺寸大小

圖表適合屏幕大小時,更有效的將數據中的規律呈現出來

image

窗口明顯變大

image

如果知道自己系統的分辨率,還可以使用形參dpi傳遞該分辨率

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM