Numpy解决问题实例--随机漫步

一.随机漫步

随机漫步,从0开始,步长1和-1出现的概率相等.我们通过内置的Python的方式来实现1000步的随机漫步:

import numpy as np
import matplotlib.pyplot as plt
import pylab
import random

position =0
walk=[position]
steps=1000
x=np.arange(steps)
for i in x:
    strp=1 if random.randint(0,1) else -1
    position+=strp
    walk.append(position)

x=np.arange(steps+1)
y=walk
plt.plot(x,y,color="red",linewidth=1)
plt.xlabel("steps")
plt.ylabel("position")
plt.title("random walk")
plt.xlim(0,100)
pylab.show()

若是用np.random模块

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

我们想要知道第一个10或-10的索引,可以用argmax来解决这个问题,它返回的是布尔型数组第一个最大值的索引.

(np.abs(walk)>=10).argmax()

二.多个随机漫步

nwalks=5000
nsteps=1000
draws=np.random.randint(0,2,size(nwalks,nsteps))
steps=np.where(draws>0,1,-1)
walks=steps.cumsum(1)

下面来计算30或-30的最小穿越时间

#那些行达到了30
hits30=(np.abs(walks)>=30).any(1)
#获取穿越时间
crossing_times=(np.abs(walks[hits30])>=30).argmax(1)

虽然是个小小的例子,但是可以看出好好的利用numpy的函数,可以大量的简化代码,以及实现更加高级的操作.numpy真是棒极了,python真是奇妙啊.

原文地址:https://www.cnblogs.com/sggggr/p/12197689.html