Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何释放分配给嵌套numpy阵列的内存?_Python_Numpy_Memory Leaks - Fatal编程技术网

Python 如何释放分配给嵌套numpy阵列的内存?

Python 如何释放分配给嵌套numpy阵列的内存?,python,numpy,memory-leaks,Python,Numpy,Memory Leaks,我有一个超大的numpy阵列,分配给它的内存永远不会释放。我只是演示一下我的情况,这样你就可以自己看到问题了 分配给简单numpy数组的内存将在删除该变量后立即释放(如下所示,我将其删除): 当我运行上述代码时,所有12GB内存将立即释放。但在嵌套numpy数组的情况下,事情会变得复杂: import numpy as np import random foo = np.array([np.array([np.ones((256,)) for j in range(random.randint

我有一个超大的numpy阵列,分配给它的内存永远不会释放。我只是演示一下我的情况,这样你就可以自己看到问题了

分配给简单numpy数组的内存将在删除该变量后立即释放(如下所示,我将其删除):

当我运行上述代码时,所有12GB内存将立即释放。但在嵌套numpy数组的情况下,事情会变得复杂:

import numpy as np
import random

foo = np.array([np.array([np.ones((256,)) for j in range(random.randint(100, 150))]) for i in range(40000)])

sum(f.nbytes for f in foo)
10240481280

del(foo)
现在,即使显式运行
gc.collect()
,10 GB的内存也永远不会被释放。你们有什么线索吗


p.S:env:Ubuntu+Python 2.7+numpy 1.15.1

也许您可以尝试在删除数组之前将其展平。@binyamine它可能会工作。它可能有很多解决方法,但我正在寻找这种奇怪行为背后的原因。在ubuntu 16.04/Python 3.5/numpy 1.13.1上,我可以确认同样的行为。让我怀疑这不是numpy特有的问题。在循环中运行有问题的代码:如果内存没有持续攀升,这不是泄漏,而只是无法将内存返回操作系统(这是常见且复杂的)。
import numpy as np
import random

foo = np.array([np.array([np.ones((256,)) for j in range(random.randint(100, 150))]) for i in range(40000)])

sum(f.nbytes for f in foo)
10240481280

del(foo)