Cómo implementar la recolección de basura en Numpy

Tengo un archivo llamado main.py , que hace referencia a otro archivo Optimisers.py que solo tiene funciones y se usa en un bucle for en main.py Estas funciones tienen diferentes funciones de optimización en ellos.

Este Optimisers.py luego hace referencia a otros dos archivos similares con solo funciones en ellos, que están en bucles while. Todos estos archivos utilizan numpy.

Creo que esto se debe a los bucles con funciones que llaman y crean matrices en numpy, lo que lleva a una sobrecarga de memoria. Por lo tanto, no puedo terminar algunos algoritmos de optimización, o pasar por todas las coordenadas posibles que me gustaría.

¿Cómo me aseguro la eliminación de variables en numpy? Como lo entiendo, las bibliotecas de C de numpy complican el proceso estándar de Python. ¿Qué hace el comando %reset array (desde el siguiente enlace)? ¿Y dónde debería implementarlo?

PD: He leído ” Liberar memoria de una enorme matriz numpy en IPython ” y gc.collect() tampoco funciona.

Cuando ya no se hace referencia a una matriz numpy, el GC la liberará automáticamente. Los objetos C están envueltos en objetos Python, por lo que para usted no debería importar cómo se implementa.

Asegúrese de que las matrices no estén referenciadas en las variables globales, ya que se quedan hasta que se sobrescriban o el progtwig se cierre.

Si necesita liberar una matriz de una variable local antes de que esté fuera del scope, puede usar del variablename (o simplemente asignar, por ejemplo, Ninguno), pero eso no se ocupará de ninguna otra referencia, solo la que se menciona.

Para la depuración en la que está haciendo referencia a un objeto, puede usar gc.get_referrers(object) .

PD: He leído Liberar memoria de una enorme matriz numpy en IPython y gc.collect () tampoco funciona.

A menos que tenga ciclos o haya llamado a gc.disable() , gc.collect() no hará que el GC suceda antes.