案例:从0开始,步长1和-1出现的概率相等。通过内置的random模块以纯python的方式实现1000步的随机漫步:

112、复盘:随机漫步

112、复盘:随机漫步
在In[1]:中代码random.randint()表示随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值。
从代码运行的结果看出,随机漫步就是把各步数的累计和用一个数组运算来实现。
我用np.random模块一次性随机产生1000个“掷硬币的结果,将其分别设置为1或-1,然后计算累计和:

112、复盘:随机漫步

112、复盘:随机漫步
可以求出walk_2中的最大值和最小值:

112、复盘:随机漫步
假设我们要知道本次随机漫步需要多久才能距离初始0点至少10步远(任一方向均可)。np.abs(walk_2) >= 10 可以得到一个布尔型数组,它表示的是距离是否达到或超过10,使用argmax函数获取第一个10或-10的索引。argmax返回的是该布尔型数组第一个最大值的索引(True就是最大值):

112、复盘:随机漫步
一次模拟多个随机漫步
使用numpy.random函数传入一个二元元组生成一个二维数组,然后一次性计算5000个随机漫步过程(一行一个)的累积和:

112、复盘:随机漫步

112、复盘:随机漫步
计算所有漫步过程的最大值和最小值:

112、复盘:随机漫步
计算30或-30的最小穿越时间,使用any函数检查是否5000个过程都达到30:

112、复盘:随机漫步
利用布尔型数组选出穿越30或-30的随机漫步(行),并调用argmax函数在轴1上获取穿越时间:

112、复盘:随机漫步
网友评论