两次调用 scipy.odeint 时出现"内存错误"



我使用scipy.odeint来求解一系列ode方程。在我的代码中,解算器将被调用多次(每次调用都会生成40500*10001数组),第一次调用时解算器工作得很好,但第二次调用时会出现MemoryError。有人能帮我解决这个问题吗?

fcn是一个返回(040500)数组的子程序,rho是一个(040500的)长度数组

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的内存。在第二次调用中,odeint为解决方案分配了另一个3 GB。这最终将分配给solve,之前分配的3 GB将由python解释器恢复,但有时新旧阵列都存在,这需要6 GB。

这就是为什么我轻率地评论道:"这是一枚五分硬币,孩子。给自己多一点记忆。">

最新更新