在python中查找达到给定随机游动阈值的平均时间

在python中查找达到给定随机游动阈值的平均时间,python,numpy,random-walk,Python,Numpy,Random Walk,我有一个10000步的随机行走代码。然后,我不得不重复模拟12次,并将每一次都保存在一个单独的文本文件中,我已经这样做了。我现在被分配了一个任务,去发现当随机游动从(0,0)开始时,平均需要多少步才能达到x=10。这意味着如果你想象在x=10有一条南北线,我需要计算我12次行走的平均值,从起始位置(0,0)到x=10需要多少步。我认为这将涉及使用if语句,但我不确定如何在代码中使用它,以及如何让代码告诉我每次运行需要多少步骤,然后计算所有运行的平均值 我的随机行走代码和将不同的跑步记录保存在单独

我有一个10000步的随机行走代码。然后,我不得不重复模拟12次,并将每一次都保存在一个单独的文本文件中,我已经这样做了。我现在被分配了一个任务,去发现当随机游动从(0,0)开始时,平均需要多少步才能达到x=10。这意味着如果你想象在x=10有一条南北线,我需要计算我12次行走的平均值,从起始位置(0,0)到x=10需要多少步。我认为这将涉及使用if语句,但我不确定如何在代码中使用它,以及如何让代码告诉我每次运行需要多少步骤,然后计算所有运行的平均值

我的随机行走代码和将不同的跑步记录保存在单独的文本文件中的代码如下:


import numpy as np 
import matplotlib.pyplot as plt
import random as rd
import math

a = (np.zeros((10000, 2), dtype=np.float)) 
     
def randwalk(x,y):
     theta= 2*math.pi*rd.random()
     x+=math.cos(theta); 
     y+=math.sin(theta); 
     return (x,y)
     
x, y = 0.,0.  
for i in range(10000): 
     x, y = randwalk(x,y)
     a[i,:] = x,y
     
plt.figure() 
plt.title("10000 steps 2D Random Walk")
plt.plot(a[:,0],a[:,1], color = 'y')
plt.show()

N = 12
for j in range(N): 
    rd.seed(j) 
    x , y = 0., 0.
    for i in range(10000):
        x, y = randwalk(x,y)
        a[i,:] = x, y
    filename = 'Walk'+ str(j) 
    np.savetxt(filename, a) 

简单的回答是:

np.argmax(np.abs(a[:, 0]) > 10)
它的作用是:

  • np.abs(a[:,0])
    是x值的绝对值
  • *>10
    是一个数组,当上述值大于10时,该数组为
    True
  • np.argmax(*)
    给出了
    *
    中最大值的参数。由于它是布尔值,
    max
    True
    (1)
    argmax
    总是给出
    max
    的第一个实例,因此它是第一个
    True
  • 因此,这给出了高于10的第一步指数,相当于达到| x |>10所需的时间


    现在,我使用绝对值的原因是,一次行走不能保证达到10(或-10,但两者都不太可能),所以如果你只想要10,你将有一些角落的情况需要覆盖。

    谢谢你,这将只计算我12次随机行走中的一次,不是吗?我该如何计算所有随机游动的平均值呢?严格来说,对于x=10,去掉绝对值也一样吗?至于我的问题,严格来说是x=正10。为了对我的所有随机游动分别获取它,我尝试用r替换np.argmax(np.abs(a[:,0])>10)中的a,并将r列为所有随机游动的所有点的列表,但这仍然只给了我一个值?