当前位置: 首页 > 面试题库 >

如何在Numpy中实现垃圾回收

归翔
2023-03-14
问题内容

我有一个名为的文件main.py,该文件引用了另一个Optimisers.py仅包含函数且在for循环中使用的文件main.py。这些功能具有不同的优化功能。

Optimisers.py然后,这将引用另外两个仅包含函数的相似文件,这些文件处于while循环中。所有这些文件都使用numpy。

我认为这是因为函数调用循环并在numpy中创建数组导致了内存过载。因此,我无法完成一些优化算法,也无法遍历我想要的所有可能的坐标。

如何确保删除numpy中的变量?据我了解,numpy的C库使标准Python流程复杂化。该%reset array命令(从下面的链接)有什么作用?我应该在哪里实施呢?


问题答案:

当不再引用numpy数组时,GC将自动释放它。C对象包装在Python对象中,因此对您来说,实现的方式无关紧要。

确保数组未在全局变量中引用,因为数组会一直存在直到被覆盖或程序退出。

如果需要在超出范围之前从局部变量中释放数组,则可以使用del variablename(或仅分配例如None),但这将不会处理任何其他引用,仅会引用一个引用。

要调试引用对象的位置,可以使用gc.get_referrers(object)

PS我已经阅读了在IPython中释放巨大的numpy数组的内存,并且gc.collect()也不起作用。

除非您有周期或已致电gc.disable()gc.collect()否则不会使GC尽快发生。



 类似资料:
  • 问题内容: 即使很棘手,也可以在Java中强制进行垃圾回收吗?我知道;,;但是他们只建议做GC。我该如何强制GC? 问题答案: 最好的选择是调用,这只是向垃圾收集器提示你要它进行收集。由于垃圾收集器是不确定的,因此无法强制立即收集。

  • 问题内容: 有时您可能想要避免/最小化垃圾收集器,因此我想确定如何做。 我认为下一个是正确的: 在函数的开头声明变量。 使用数组而不是切片。 还有吗 问题答案: 避免垃圾相对简单。您需要了解在哪里进行分配,并查看是否可以避免分配。 首先,在函数开头声明变量将无济于事。编译器不知道区别。但是,人类会知道其中的区别,并且会惹恼他们。 使用数组而不是切片将是可行的,但这是因为将数组(除非取消引用)放置在

  • 垃圾回收 我们对生产中花了很多时间来调整垃圾回收。垃圾回收的关注点与Java大致相似,尽管一些惯用的Scala代码比起惯用的Java代码会容易产生更多(短暂的)垃圾——函数式风格的副产品。Hotspot的分代垃圾收集通常使这不成问题,因为短暂的(short-lived)垃圾在大多情形下会被有效的释放掉。 在谈GC调优话题前,先看看这个Attila的报告,它阐述了我们在GC方面的一些经验。 Scal

  • 对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。 当我们不再需要某个东西时会发生什么?JavaScript 引擎如何发现它并清理它? 可达性(Reachability) JavaScript 中主要的内存管理概念是 可达性。 简而言之,“可达”值是那些以某种方式可访问或可用的值。它们一定是存储在内存中的。 这里列出固有的可达值的

  • 垃圾收集,引用计数,显式分配 和所有的现代语言一样,OCaml提供垃圾收集器,所以你不用像C/C++一样显式地分配和释放内存。 JWZ在他的文章 "Java sucks" rant(Java蛋疼(怒)!): 第一个好家伙是Java没有 free()。其他的都没有所谓了。这几乎掩盖了所有的缺点,不管有多糟糕, 这个有点让后续文档基本都没有意义了,但是...(译注:但是啥大家自己看吧) OCaml的垃

  • 问题内容: 首先,我想澄清一下我的理解,因为以下问题是相同的。 上面代码的输出是 这意味着,尽管一旦GC运行,实际的对象对象就会被垃圾回收,但是内存中仍然有一个类对象,该对象此时不指向任何对象。 现在考虑到上述理解为真,我对工作原理感到困惑。在下面的代码中 输出: 现在的 问题 是,据说输入是弱引用,这意味着在上面的代码中, 成为实际对象时可以进行垃圾回收,因为不再有对该对象的强引用,但是 和作为