如何将每个第 n 次计算写入 for 循环内的数组? (python)

How to write every nth calculation to an array inside a for loop? (python)

我是 运行 python 中的模拟,其中涉及许多循环。由于我的笔记本电脑处理能力有限,我只想将每第 n 个结果写入存储我的数据的数组。我在网上查看了有关切片数组的信息,但只能在创建全尺寸数组后才能找到如何进行切片的方法。 for循环如下:

    def Simulate(time, steps):

            history_x = np.zeros(2000000)
            history_y = np.zeros(2000000)

            for i in range(2000000):
                    #calculate positions
                    a_x = ((-6.67e-11)*(mE)/((x**2 + y**2)))
                    a_y = ((-6.67e-11)*(mE)/((x**2 + y**2)))
                    v_x = v_x + (delta_t)*a_x
                    v_y = v_y + (delta_t)*a_y
                    y = y + (delta_t)*v_y + ((delta_t)**2)*a_y*0.5
                    x = x + (delta_t)*v_x + ((delta_t)**2)*(a_x)*0.5

                    rocket_history_x[i] = x
                    rocket_history_y[i] = y

(x,y, v_x, v_y 和 mE 都是在我的代码中的循环之前定义的,不想弄乱这个 post)

本质上数学并不重要,但我希望 history_x 和 history_y 只存储 x 和 y 的每第 n 次计算。我该怎么做?

您可以进行如下检查:

if i%n == 0:

根据我上面的评论,完整的代码如下所示。这里您初始化了两个空列表,而不是创建一个长度为 2000000 的数组。然后您只需将 append 语句包含在 if 语句中,根据 if 条件保存每个第 n 个值。

def Simulate(time, steps):
    history_x, history_y = [[] for _ in range(2)] # initialize lists
    n = 10000
    for i in range(2000000):
        #calculate positions
        a_x = ((-6.67e-11)*(mE)/((x**2 + y**2)))
        a_y = ((-6.67e-11)*(mE)/((x**2 + y**2)))
        v_x = v_x + (delta_t)*a_x
        v_y = v_y + (delta_t)*a_y
        y = y + (delta_t)*v_y + ((delta_t)**2)*a_y*0.5
        x = x + (delta_t)*v_x + ((delta_t)**2)*(a_x)*0.5
        if i% n == 0: # Check for the step
            rocket_history_x.append(x) # store x here
            rocket_history_y.append(y) # store y here