Присоединение к массиву в цикле - Python - PullRequest
0 голосов
/ 04 марта 2019

Пожалуйста, смотрите этот вопрос для упрощенной версии без беспорядка

Я пишу симуляцию гравитации.Структура моего кода:

  • A solution массив - он содержит (уже вычисленное) решение для системы масс.Из-за природы решения дифференциальных уравнений в Python все соответствующие значения (каждый компонент положения и скорости для каждой массы в каждом временном значении) находятся в массиве solution.

  • Массив masses.Здесь объекты содержат всю информацию о каждой массе, включая массивы x_history, которые я пытаюсь обновить ниже.

  • Нет.размеров d.Здесь я использовал 2 для простоты.

У меня есть следующий код:

d = 2
for i in range(len(masses)): #  loop through masses
    for k in range(len(solution)): # loop through solution to obtain values at each timestep
        x = []  #  d dimensional x vector at current timestep
        #  fill the x-vector
        for j in range(d):
            x.append(solution[k][d * i + j])
        masses[i].x_history.append(x)

Идея состоит в том, чтобы просто проходить через объекты в массиве massesвыделите соответствующую информацию из другого массива (массивы x, представляющие векторы) и добавьте ее к массивам x_history в массовых объектах.Проблема (я проверил это отладкой) в строках:

masses[i].x_history.append(x)

Вместо добавления к masses[i].x_history для текущего значения i, код добавляет его к массиву x_historyдля всех объектов в списке масс, что означает, что в конце внешнего цикла каждый объект в списке масс содержит все информацию, а не только свою собственную.

У кого-нибудь естьидея, почему это может иметь место?Я случайно векторизовал эту операцию или что-то в этом роде?

1 Ответ

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

Кажется, что вы сделали цикл правильным, но добавили значение в self.masses [i] .x_history в неправильной позиции с отступом.Вы должны переместить эти последние два строковых оператора на один заданный (четыре пробела) назад.

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