我使用scipy.odeint来解决一个ode方程列表。在我的代码中,求解器将被多次调用(对于每次调用将生成一个40500 * 10001数组),在它调用时第一次求解器工作得很好,但是在第二次调用时出现MemoryError。任何人都可以帮我解决这个问题吗?
fcn是一个返回(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]
....
答案 0 :(得分:0)
solve
是一个64位浮点值的数组,因此需要3 GB的内存。在第二个调用中,{em>另一个 3千兆字节由odeint
分配给解决方案。这将最终分配给solve
,python解释器将恢复先前分配的3千兆字节,但有一段时间存在旧数组和新数组,这需要6千兆字节。
这就是我做出轻率评论的原因:“这是一个镍,孩子。给自己留一些记忆。”