如何将每个第 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
我是 运行 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