import random import numpy as np position = 0 walk = [position] #用position初始化walk列表 steps = 1000 #假设走1000步 for i in range(steps):#使用random随机生成1或-1的步数 step = 1 if random.randint(0, 1) else -1 position += step walk.append(position) #把走到的位置记录下来
###使用numpy.random生成随机数 np.random.seed(12345) nsteps = 1000 draws = np.random.randint(0, 2, size=nsteps) steps = np.where(draws > 0, 1, -1) #随机生成1或-1的步数 walk = steps.cumsum() #把走到的位置记录下来 print(walk.min()) #走到的最小值 print(walk.max()) #走到的最大位置 print((np.abs(walk) >= 10).argmax()) #走到-10或10位置时的步数
#一次模拟多个随机漫步 nwalks = 5000 nsteps = 1000 #模拟5000个随机漫步 draws = np.random.randint(0, 2, size=(nwalks, nsteps)) steps = np.where(draws > 0, 1, -1) #使用正态分布以均值为0,标准差为0.25随机生成 #steps = np.random.normal(loc = 0,scale=0.25,size=(nwalks, nsteps)) walks = steps.cumsum() print(walk.min()) #走到的最小值 print(walk.max()) #走到的最大位置 print(walks) hits30 = (np.abs(walks) >= 10).any() #检查走到-30或30位置的walks print(hits30.sum()) #第一次走到30或-30位置走的步数 crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1) print(crossing_times.mean()) #求均值,如果使用正态分布则略去