2016-06-02 11 views
1

Ich benutze scipy.odeint, um eine Liste von Ode-Gleichungen zu lösen. In meinem Code wird der Solver mehrere Male aufgerufen (für jeden Aufruf wird ein 40500 * 10001 Array erzeugt), beim ersten Aufruf des Solver funktioniert der Solver gut, aber dann tritt der MemoryError beim zweiten Aufruf auf. Kann mir jemand bei diesem Problem helfen?'MemoryError' beim zweimaligen Aufruf von scipy.odeint

fcn ein Unterprogramm ist, das einen (0,40500) Array zurückgibt, ist rho a (0,40500) Länge Array

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

"Hier ist ein Nickel, Kind. Holen Sie sich etwas mehr Speicher." :) –

Antwort

0

solve ist ein Array aus 64 Bit Gleitkommazahlen, so dauert es 3 Gigabyte Speicher. Im zweiten Anruf wird ein weiterer 3 Gigabyte von odeint für die Lösung zugewiesen. Dies wird schließlich solve zugeordnet werden, und die zuvor zugewiesenen 3 Gigabyte werden von der Python-Interpreter wiederhergestellt werden, aber es gibt eine Zeit, wenn die alten und neuen Arrays vorhanden sind, die 6 Gigabyte benötigt.

Deshalb habe ich den oberflächlichen Kommentar gemacht: "Hier ist ein Nickel, Kind. Holen Sie sich etwas mehr Erinnerung."

Verwandte Themen