【问题标题】:How do I free a numpy array?如何释放 numpy 数组?
【发布时间】:2018-10-21 12:04:42
【问题描述】:

我想删除整个 numpy 数组。例如,如果我让数组 A

A = np.zeros((2,3))

我想删除整个数组 A 并想在其他用途​​中重用名称“A”。

有没有删除数组的代码(函数)?

【问题讨论】:

  • Python 是一种内存管理语言,一旦引用计数为零,对象就会自动回收。
  • @juanpa.arrivillaga ... 除了 numpy 不是真正的 python 并且不一定那样工作
  • @Jivan 是的,是的。是的,确实如此。
  • 好吧,试试del my_numpy_array_taking_50gb_in_memory,然后看看 htop 中会发生什么——内存仍在分配中

标签: python numpy-ndarray


【解决方案1】:

我想删除整个数组 A

简单:

del A

想在其他用途​​中重用名称“A”。

同样简单:

A = whateverElse  # associate A with whateverElse, so simple :o)

【讨论】:

  • 这不会释放内存。不知何故,数组继续附加到内存(即使变量不再可访问)
  • @Jivan - 当然,这种情况是可能的。可以在完成 del A 之前测试 A.flags 以查看更多详细信息。 Numpy 使用智能结构进行矢量/矩阵/张量数据存储和操作。有些甚至不“拥有”自己的数据,而只是 lightweight-“reader”-helper 进入另一个 numpy-object 的数据,因此删除此类非“所有者”出于显而易见的原因,将只删除 lightqweight-"reader"-helper,而不是 fat-(_foreign by Ownership_) i>-数据本身。
  • 知道在这些情况下如何从胖数据中释放内存吗?
  • @Jivan 没有办法在 Python 中显式释放内存
  • @juanpa.arrivillaga 是否意味着如果我们在内存中创建一个 50gb 的数组并且del 没有释放它,那么除了杀死进程之外没有其他方法可以释放这个内存吗?跨度>
【解决方案2】:

只需将 A 分配给其他东西。正如@juanpa.arrivillaga 所说,Python 将处理现在“未引用”的数组并自行进行任何垃圾收集。
例如A = "new string"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多