追加到循环中的数组-Python

2022-03-17 00:00:00 python vectorization

问题描述

请参阅this问题了解精简版

我在写重力模拟。我的代码结构是:

  • Asolution数组-它包含质量系统的(已计算的)解。由于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.mags[i].x_HISTORY。您必须将最后两行语句向后移动一个预期的位置(四个空格)。

相关文章