我在 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。
答案 0 :(得分:1)
您的估算还需要考虑已经针对list
的 180000 x 7680 x float32
表示的内存分配,因此没有关于动态内存释放的其他详细信息/ garbage-collections, numpy.asarray()
方法需要的不仅仅是1800000 x 7680 x numpy.float32
字节的另一个空格。
如果您尝试使用 list
的长度不到三分之一进行测试,则可以检查 numpy.array
数据表示,以便为您的内存可行设计提供准确的数据
与原始的数据流和操作模式相比,内存分析可能有助于指出瓶颈并理解代码要求,这有时可以帮助节省数据所需的一半分配空间:
(图。:礼貌scikit-learn测试numpy
- 基于或BLAS
- 直接调用方法对内存分配包络的影响)
答案 1 :(得分:0)
您应该考虑到,在转换过程中您需要两倍大小的内存。
此外,其他软件可能占用你的一些内存,当你没有定义额外的调页空间时,使用11GB的12GB内存可能会给你的系统带来麻烦。