# -*- coding: utf-8 -*-
"""
Created on Tue Jan 03 19:56:20 2017
@author: night
"""
import numpy as np
nwalks = 5000
nsteps = 1000
draws = np.random.randint(0,2,size=(nwalks,nsteps)) #size既为5000行1000列,也就是5000次1000步的随机漫步
print draws #draws代表了一个5000行的列表,每个列表有1000个元素,这1000个元素是有0和1随机构成
steps = np.where(draws>0,1,-1) #当元素为1时,step为1,当元素为0时,step为-1
walks = steps.cumsum(1) #所有元素的累积和, 行axis=1,列axis=0
print walks #walks为5000行的列表,列表中的有1000个元素,每个元素是前面所有元素的累积和
print walks.max()
print walks.min()
hits30 = (np.abs(walks)>=30).any(1) #any(1),对每一行按指定条件进行判断,条件为>=30,当每一行中只要存在1个>=30的数,即返回True,否则当所有值都小于30时,返回False
print hits30 #可以看出是一个布尔型列表
print hits30.sum() #True相当于1,即对1的数量求和
print walks[hits30]
print np.abs(walks[hits30])
crossing_times = (np.abs(walks[hits30])>=30).argmax(1) #hits30列表中True对应在walks中的列表选出来,然后对其中的元素取绝对值。再对前面的语句用argmax(1),即提取每行中首次出现绝对值>=30的元素索引值。
print crossing_times #返回一个列表,列表中的每一个元素由每行中首次出现绝对值>=30的索引值构成
print crossing_times.mean()
第4章-1 一次模拟多个随机漫步
最新推荐文章于 2023-11-09 10:35:16 发布