'MemoryError' 调用 scipy.odeint 两次时
'MemoryError' when calling scipy.odeint twice
我使用 scipy.odeint 求解一系列 ode 方程。在我的代码中,解算器将被调用多次(每次调用都会生成一个 40500*10001 数组),在第一次调用解算器时效果很好,但随后在第二次调用时出现 MemoryError。谁能帮我解决这个问题?
fcn是一个子程序,returns一个(0,40500)数组,rho是一个(0,40500)长度数组
for iraman in (0,30):
...
time = np.linspace(0,1.0e-11,10001)
solve = odeint(fcn,rho,time,rtol= tol, atol = tol, mxstep=5, mxords=10)
for istep in range(1, nsteps+1):
t = time[istep]
rho = solve[istep]
....
solve
是一个 64 位浮点值数组,因此需要 3 GB 的内存。在第二次调用中,另一个 3 GB 由odeint
分配给解决方案。这个最终会分配给solve
,之前分配的3G会被python解释器回收,但是有一段时间新旧数组都存在,需要6G。 =13=]
这就是我发表轻率评论的原因:"Here's a nickel, kid. Get yourself some more memory."
我使用 scipy.odeint 求解一系列 ode 方程。在我的代码中,解算器将被调用多次(每次调用都会生成一个 40500*10001 数组),在第一次调用解算器时效果很好,但随后在第二次调用时出现 MemoryError。谁能帮我解决这个问题?
fcn是一个子程序,returns一个(0,40500)数组,rho是一个(0,40500)长度数组
for iraman in (0,30):
...
time = np.linspace(0,1.0e-11,10001)
solve = odeint(fcn,rho,time,rtol= tol, atol = tol, mxstep=5, mxords=10)
for istep in range(1, nsteps+1):
t = time[istep]
rho = solve[istep]
....
solve
是一个 64 位浮点值数组,因此需要 3 GB 的内存。在第二次调用中,另一个 3 GB 由odeint
分配给解决方案。这个最终会分配给solve
,之前分配的3G会被python解释器回收,但是有一段时间新旧数组都存在,需要6G。 =13=]
这就是我发表轻率评论的原因:"Here's a nickel, kid. Get yourself some more memory."