Python绘制的随机生成的walk会给出相同的结果

时间:2018-05-02 19:18:01

标签: python loops random random-walk

input

这应该通过每次生成随机数并检查条件来生成随机游走。因此我假设如果它适用于一次散步,我可以添加更多相同的内容,并将它们全部放在同一个图形的末尾。然而,显然这不是如何工作的,并且最终被绘制的图形非常相似,由于某种原因,位置之差为-2。如果我将这些块与他们自己的程序分开运行,那么代码将生成两个完全不同的步行,只要我将它们组合在一起就会停止按预期工作。究竟我错过了什么?

1 个答案:

答案 0 :(得分:0)

您不小心重复使用了第一个图中的变量:

for t2 in range(1, no_steps):
    time2[t2] = time[t2-1] + 1
    ^^^^^       ^^^^
    if number2 >= 0.5:
        position2[t2] = position2[t2-1] + 1
        number2 = random()
    else:
        position2[t2] = position[t2-1] - 1
        ^^^^^^^^^       ^^^^^^^^
        number2 = random()
plot(time2,position2)

我会使用函数生成随机游走,因此您不必担心重命名变量,如下所示:

import numpy
from pylab import *

no_steps = 10000

def random_walk(no_steps):
    # 2 * [0, 1] - 1  ->  [0, 2] - 1  ->  [-1, 1]
    directions = 2 * numpy.random.randint(0, 2, size=(1, no_steps)) - 1
    positions = numpy.cumsum(directions)
    positions -= positions[0]  # To make it start from zero

    return positions

time1 = numpy.arange(0, no_steps)
plot(time1, random_walk(no_steps))
savefig('1.png')

clf()

time2 = numpy.arange(0, no_steps)
plot(time2, random_walk(no_steps))
savefig('2.png')