在Python中获取Killed消息 - 内存是否存在问题?

时间:2014-10-13 06:31:12

标签: python numpy

我在 list -loop中有 .append() ,我 for ,最后list的长度约为180,000。 list中的每个项目都是 numpy 数组,其中包含7680个 float32 值。

然后我将列表转换为numpy数组,即我期望一个形状数组(180000,7680):

d = numpy.asarray( dlist, dtype = 'float32' )

这导致脚本崩溃并显示Killed消息。

内存是问题吗?假设float32需要4个字节,180000x7680x4bytes = 5.5 GB。

我使用的是64位Ubuntu,12 GB RAM。

2 个答案:

答案 0 :(得分:1)

是的,内存是问题

您的估算还需要考虑已经针对list 180000 x 7680 x float32 表示的内存分配,因此没有关于动态内存释放的其他详细信息/ garbage-collections, numpy.asarray() 方法需要的不仅仅是1800000 x 7680 x numpy.float32字节的另一个空格。

如果您尝试使用 list 的长度不到三分之一进行测试,则可以检查 numpy.array 数据表示,以便为您的内存可行设计提供准确的数据

与原始的数据流和操作模式相比,内存分析可能有助于指出瓶颈并理解代码要求,这有时可以帮助节省数据所需的一半分配空间: scikit-learn matrix allocations in numpy-based or BLAS-direct calling method图。:礼貌scikit-learn测试numpy - 基于或BLAS - 直接调用方法对内存分配包络的影响)

答案 1 :(得分:0)

您应该考虑到,在转换过程中您需要两倍大小的内存。

此外,其他软件可能占用你的一些内存,当你没有定义额外的调页空间时,使用11GB的12GB内存可能会给你的系统带来麻烦。