Пожалуйста, смотрите этот вопрос для упрощенной версии без беспорядка
Я пишу симуляцию гравитации.Структура моего кода:
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
для всех объектов в списке масс, что означает, что в конце внешнего цикла каждый объект в списке масс содержит все информацию, а не только свою собственную.
У кого-нибудь естьидея, почему это может иметь место?Я случайно векторизовал эту операцию или что-то в этом роде?