2

我正在生成一维随机游走,并且我希望我的 for 循环随着时间的推移保存到目前为止已达到的与原点的最大距离。产生 5 次随机游走。这是我的代码:

for j in range(5):
    r = rand(10000)
    t = range(10000)
    x = zeros(10000)
    y = zeros((10000, 5))
    for i in range(10000):
        walk = r[i]
        if walk < 0.5:
            x[i] = x[i-1] - 1
            y[:,j]= maximum.accumulate(abs(x))
        else:
            x[i] = x[i-1] + 1
            y[:,j]= maximum.accumulate(abs(x))
    plot(t,x, label="Walk %d" %(j+1))

title("1-D Random Walk (Position versus Time)")
xlabel("Time")
ylabel("Position")
legend(loc="best")
grid()

问题在于,在 for 循环迭代设定范围 (5) 后,输出二维数组仅包括最后一次迭代。不知何故,它覆盖了以前的那些,所以我只会得到一个 10000x5 的数组,只填充最后一行。

我怎样才能使这项工作?

4

1 回答 1

4

出于某种原因,您选择执行

y = zeros((10000, 5))

一遍又一遍,每次都通过外循环。

作为一个明显的结果,只有最后一个分配y可能会“接受”,显然会覆盖任何先前对同名的分配。从这样的重复分配中,你还能期待什么其他行为?!

将此分配移到外循环之外,不会“覆盖” name y

于 2015-03-28T20:12:57.163 回答