Создание 2D-списка из вложенных циклов - PullRequest
0 голосов
/ 03 марта 2019

Итак, у меня есть проект на python для класса, в котором мы моделируем эксперимент с одномерным случайным блужданием.Итак, первая часть проблемы состояла в том, что мы создали программу, которая выполняла бы цикл For 1000 раз и увеличивала / понижала «позицию» нашего начального значения на 1. Он также сохранял значения положения и времени для построения графика какну.

Программа для этого:

%matplotlib inline
import matplotlib.pyplot as plt

x = 0
n = 1000

pos = []
time = []
for i in range(0,1000):
    a = np.random.randint(low,high)

    if a == 0:
        x -= 1
    else:
        x += 1

    pos.append(x)
    time.append(i)

plt.plot(time, pos)

Следующая задача - взять эту программу и запустить цикл for, где мы измеряем 5 различных «траекторий» (в основном, мы хотим произвести5 разных графиков одновременной симуляции случайных прогулок)

Как конкретно был сформулирован вопрос: "Отлично! Хотя было бы замечательно построить набор из них одновременно. Далее, поставьте циклкод в дополнительном цикле, где счетчик траекторий (скажем, trj) идет от 0 до 4, и сохраните ваши траектории в 2D-списке. Затем нарисуйте все пять траекторий ниже. "

Вот мойпопытка решения:

trj = [[] for i in range(5)]


x = 0
n = 1000


for j in range(5):
    pos = []
    time = []
    trj[j] = [time, pos]

    for r in range(0,1000):
        a = np.random.randint(low,high)

        if a == 0:
            x -= 1
        else:
            x += 1

        pos.append(x)
        time.append(r)

plt.plot(trj[1])

Я получаю ошибку «вне диапазона».Буду признателен за ПОМОЩЬ, поскольку я концептуально не понимаю 2d списки (я понимаю, что они содержат списки в строках И столбцах)

1 Ответ

0 голосов
/ 03 марта 2019

Функция Matplotlib plot принимает 2 аргумента;в первом примере вы передаете его time и pos - однако во втором примере вы передаете ему список ([time, pos]), который является только одним аргументом, поэтому возникает ошибка

.расширить этот список до 2 аргументов - один из способов сделать это - использовать *args, чтобы расширить список до количества аргументов функции:

plt.plot(*trj[1])

Или, если вам не нравитсяформат *args, более простой в использовании параметр:

plt.plot(trj[1][0], trj[1][1])
...