Why does comparison of a numpy array with a list consume so much memory?
最近这有点刺痛我。我通过从代码中删除所有numpy数组与列表的比较来解决它。但是为什么垃圾收集器会错过收集呢?
运行此命令并观看它会消耗您的内存:
1 2 3 4 5 | import numpy as np r = np.random.rand(2) l = [] while True: r == l |
在64位Ubuntu 10.04,virtualenv 1.7.2,Python 2.7.3,Numpy 1.6.2上运行
以防万一有人偶然发现并想知道...
@Dugal是的,我认为这是当前numpy版本(2012年9月)中的内存泄漏,当引发某些异常(请参阅此内容)时会发生此泄漏。为什么添加@BiRico进行"修复"的
解决方法:这与列表没有直接关系,但是例如大多数广播异常(空列表不适合数组大小,空数组会导致相同的泄漏。请注意,内部有一个从不准备的异常)表面)。因此,作为一种解决方法,您可能应该首先检查形状是否正确(如果您做了很多,否则我不会担心,如果我正确的话,这只会泄漏一小串)。
已修复:numpy 1.7将解决此问题。
对不起,我无法给出更完整的答案,但这似乎与垃圾回收有关。我能够在Redhat 5.8上使用python 2.7.2,numpy 1.6.1重新创建此问题。但是,当我尝试以下操作时,内存使用率恢复正常。
1 2 3 4 5 6 7 | import gc import numpy as np r = np.random.rand(2) l = [] while True: r == l gc.collect() |