'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."