两次调用scipy.odeint时出现'MemoryError'

时间:2016-06-02 16:07:21

标签: python scipy odeint

我使用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]
        ....  

1 个答案:

答案 0 :(得分:0)

solve是一个64位浮点值的数组,因此需要3 GB的内存。在第二个调用中,{em>另一个 3千兆字节由odeint分配给解决方案。这将最终分配给solve,python解释器将恢复先前分配的3千兆字节,但有一段时间存在旧数组和新数组,这需要6千兆字节。

这就是我做出轻率评论的原因:“这是一个镍,孩子。给自己留一些记忆。”