填充 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 除 del
和 gc
调用之外的处置。
提前感谢您的指点(双关语)!
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 不会执行分配,直到您用真实数据替换零,这就是您的内存使用率不断攀升的原因。
我正在尝试找出在填充数组时遇到的 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 除 del
和 gc
调用之外的处置。
提前感谢您的指点(双关语)!
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 不会执行分配,直到您用真实数据替换零,这就是您的内存使用率不断攀升的原因。