2016-06-02 3 views
1

Я использую scipy.odeint для решения списка уравнений ode. В моем коде решатель будет вызываться несколько раз (для каждого вызова будет создан массив 40500 * 10001), при первом вызове решатель работает хорошо, но затем MemoryError возникает при втором вызове. Может ли кто-нибудь помочь мне с этой проблемой?'MemoryError' при вызове scipy.odeint дважды

кп является подпрограммой, которая возвращает (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 гигабайт памяти. Во втором вызове другой 3 гигабайта выделяется odeint для решения проблемы. В конечном итоге это будет присвоено solve, а ранее выделенные 3 гигабайта будут восстановлены интерпретатором python, но есть время, когда существуют как старые, так и новые массивы, для которых требуется 6 гигабайт.

Вот почему я сделал легкомысленный комментарий: «Вот никель, малыш, возьмите себе еще память».