填充 numpy 数组时内存爆炸

Memory blowing up when filling numpy array

我正在尝试找出在填充数组时遇到的 python 内存处理问题。我正在填充一个长度为 [2048,3000,256,76] 的巨大多维数组,我已经创建了它,因此它的内存已经分配好了。我用这样的随机数在 for 循环中填充它:

import numpy as np

myarray = np.zeros((2048,3000,256,76))
for i in range(2048):
    myarray[i,:,:,:] = np.random.normal(0.,1.,[3000,256,76])

但是,如果我看到进程正在使用的内存,它会稳步增加到我必须杀死它的程度,我想是因为之前调用 np.random.normal(我有它的值已经存储在 myarray 上)不会被丢弃。我怎样才能摆脱它们?可能吗?我试过 运行 垃圾收集器,但没用。

我意识到这是一个相当基本的问题,但我所有的内存分配技巧都来自 C。那里只是释放 arrays/vectors 的问题,以免陷入这样的问题,但我不知道如何将这些技能转化为 object-calling/creation 除 delgc 调用之外的处置。

提前感谢您的指点(双关语)!

PS:这只是一个更大问题的玩具代码片段。我的实际问题与多线程有关,但这可以为该问题提供一些线索。

你的数组很大。准确地说是 891 GiB。在我的系统 windows 上,我得到 MemoryError:

>>> myarray = np.zeros((2048,3000,256,76))
MemoryError: Unable to allocate 891. GiB for an array with shape (2048, 3000, 256, 76) and data type float64

which I already created so its memory is already allocated.

不幸的是,这不是真的。在不是 windows 的系统上,我相信 OS 不会执行分配,直到您用真实数据替换零,这就是您的内存使用率不断攀升的原因。