在原地释放Numpy内存

4
有没有办法使numpy释放一个数组所使用的内存?我不能只运行“del array”,因为该数组被其他地方引用。
下面是为什么这很重要以及为什么我认为这是安全的例子:
def run():
   arr = np.array(....)
   arr2 = process(arr)
   fit(arr2)

我能够编辑process,但无法运行run。现在arr保存了很多在process运行后不再需要的内存。我希望在创建了arr2之后,能够从process中删除arr的内容。


你的意思是删除存储的“数据”,而不仅仅是删除指向这些数据的“指针”吗? - MSeifert
1
如果数组在其他地方使用,释放内存会破坏那个“其他地方”的功能,对吧? - Marc B
有趣的问题。根据我对Python的了解,我想数据将持续存在,直到所有引用都被删除。但我期望很快会出现一些大师,向我们展示一些numpy黑魔法,证明我是错的。 - Reti43
你可能会在weakref中找到一些帮助,但正如@MarcB所指出的那样,删除你仍然需要的东西是一个坏主意。 - msw
更新后的内容,附带示例: - Alex Rothberg
显示剩余5条评论
1个回答

1
您可以尝试将数组大小调整为较小的数组:

arr.resize((2,), refcheck=False)

它会就地更改数组:

a.resize(new_shape, refcheck=True)

就地更改数组的形状和大小。

...

注释

如果需要,此函数会重新分配数据区域的空间。

只有连续数组(内存中相邻的数据元素)才能被调整大小。

引用计数检查的目的是确保您不将此数组用作另一个Python对象的缓冲区,然后重新分配内存。但是,引用计数可能以其他方式增加,因此,如果您确定未与另一个Python对象共享此数组的内存,则可以安全地将refcheck设置为False。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接