我有一个名为main.py
的文件,该文件引用另一个文件Optimisers.py
,该文件只包含其中的函数,并在for
的{{1}}循环中使用。这些函数具有不同的优化功能。
这个main.py
然后引用另外两个类似的文件,其中只包含函数,它们位于Optimisers.py
循环中。所有这些文件都使用numpy。
我认为这是因为函数调用的循环和在numpy中创建数组,这导致内存过载。因此,我无法完成一些优化算法,或循环遍历我想要的所有可能坐标。
如何确保删除numpy中的变量?据我所知,numpy的C库使标准Python进程复杂化。 while
命令(来自下面的链接)有什么作用?我应该在哪里实现它?
P.S。我已阅读" Releasing memory of huge numpy array in IPython",
并且%reset array
也不起作用。
答案 0 :(得分:5)
当不再引用numpy数组时,GC将自动释放它。 C对象包装在Python对象中,所以对你来说它应该是如何实现的。
确保全局变量中没有引用数组,因为这些数据一直存在,直到被覆盖或程序退出。
如果你需要在局部变量超出范围之前从局部变量中释放一个数组,你可以使用del variablename
(或者只分配例如None),但这不会处理任何其他引用,只需要一个命名。
对于调试引用对象的位置,可以使用gc.get_referrers(object)
。
P.S。我已经读过在IPython中释放大量numpy数组的内存,而gc.collect()也不起作用。
除非您有周期或已调用gc.disable()
,否则gc.collect()
不会更快地发生GC。