Как построить результаты повторного цикла отдельно? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть код для 1D случайного блуждания, который мне нужно запустить 20 раз и отобразить результаты в одном графике.Код работает правильно на 1 прогулку, но я не могу понять, как это сделать для нескольких прогулок.

Я пробовал цикл while и цикл for, и по какой-то причине он перебирает цикл, и добавляет результаты, вместо того, чтобы возвращаться к началу и начинать заново.Итак, если у меня есть 100 шагов и я хочу сделать эту прогулку 20 раз, она строит одну прогулку из 20 * 100 = 2000 шагов, а не 20 прогулок из 100 шагов.
Вот мой код:

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

p=0.5
q=1-p
prob=[p,q]

N=100 #number of steps
n=20 #number of walks

start = 0  
positions = [start]
no_of_walks=list(range(0,n+1)) #since its a half open half closed interval

for n in no_of_walks:
    for i in range(0, N): 
        rr = random.random()
        right = rr < prob[0] and positions[-1] > -N
        left = rr > prob[1] and positions[-1] < N #length to be walked over 
        positions.append(positions[-1] - right + left)
        plt.plot(positions)

plt.show()

1 Ответ

0 голосов
/ 18 декабря 2018

positions необходимо сбрасывать перед каждой прогулкой, перемещая его во внешний цикл.

Кроме того, я предполагаю, что каждая прогулка должна быть построена только один раз, поэтому вызов plt.plot(...) должен идти ввнешний цикл тоже (после прогулки).

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

p=0.5
q=1-p
prob=[p,q]

N=100
n=20

start = 0  
#positions = [start]             # <- move this
no_of_walks=list(range(0,n+1))   #     |
                                 #     |
for n in no_of_walks:            #     v
    positions = [start]          # <- here
    for i in range(0, N): 
        rr = random.random()
        right = rr < prob[0] and positions[-1] > -N
        left = rr > prob[1] and positions[-1] < N
        positions.append(positions[-1] - right + left)
    plt.plot(positions)          # <- and move this out of the walk

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...