请参阅此问题的精简版,没有混乱
我正在写一个重力模拟。我的代码的结构是:
-
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)
而不是将i
的当前值附加到masses[i].x_history
,而是将其附加到群众列表中所有对象的x_history
数组中,这意味着在外循环的末尾,质量列表中的每个对象都包含所有信息而不是自己的信息。
有人知道为什么会这样吗?我是意外地矢量化此操作吗?
似乎使循环变得正确,但将值附加到self.mass [i] .x_history处于错误的凹痕位置。您必须将最后两个行语句移动到一个打算(四个空间)的回向。