python模擬隨機游走


 

在python中,可以利用數組操作來模擬隨機游走。

 

下面是一個單一的200步隨機游走的例子,從0開始,步長為1和-1,且以相等的概率出現。純Python方式實現,使用了內建的 random 模塊:

# 隨機游走
import matplotlib.pyplot as plt
import random

position = 0
walk = [position]
steps = 200
for i in range(steps):
    step = 1 if random.randint(0, 1) else -1
    position += step
    walk.append(position)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(walk) plt.show()

 

 

第二種方式:簡單的把隨機步長累積起來並且可以可以使用一個數組表達式來計算。因此,我用 np.random 模塊去200次硬幣翻轉,設置它們為1和-1,並計算累計和:

# 隨機游走
import matplotlib.pyplot as plt
import numpy as np

nsteps = 200
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(walk)
plt.show()

 

 

一次模擬多個隨機游走

# 隨機游走
import matplotlib.pyplot as plt
import numpy as np

nwalks = 5
nsteps = 200
draws = np.random.randint(0, 2, size=(nwalks, nsteps)) # 0 or 1
steps = np.where(draws > 0, 1, -1)
walks = steps.cumsum(1)

fig = plt.figure()
ax = fig.add_subplot(111)
for i in range(nwalks):
    ax.plot(walks[i])

plt.show()

 

 

 

當然,還可以大膽的試驗其它的分布的步長,而不是相等大小的硬幣翻轉。你只需要使用一個不同的隨機數生成函數,如 normal 來產生相同均值和標准偏差的正態分布:

steps = np.random.normal(loc=0, scale=0.25, size=(nwalks, nsteps))

 


免責聲明!

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



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