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真是奇妙啊.