加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:45:13 所属栏目:Python 来源:网络整理
导读:我在for循环中有一个我.append()的列表,最后列表的长度大约为180,000.列表中的每个项目都是7680个float32值的numpy数组. 然后我将列表转换为numpy数组,即我期望一个形状数组(180000,7680): d = numpy.asarray( dlist,dtype = 'float32' ) 这导致脚本崩溃并
我在for循环中有一个我.append()的列表,最后列表的长度大约为180,000.列表中的每个项目都是7680个float32值的numpy数组.

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

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

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

记忆是问题吗?假设float32需要4个字节,180000x7680x4bytes = 5.5 GB.

我使用64位Ubuntu,12 GB RAM.

解决方法

是的,记忆是问题所在

您的估计还需要考虑已经为180000 x 7680 x float32的列表表示进行的内存分配,因此,如果没有关于动态内存释放/垃圾收集的其他详细信息,numpy.asarray()方法需要不仅仅是1800000 x 7680 x numpy.float32字节的另一个空间.

如果您尝试使用少于列表的三分之一长度进行测试,则可以检查numpy.array数据表示的结果有效开销,以便为您的内存可行设计提供准确的数据

与原始数据流和操作模式相比,内存分析可能有助于指出瓶颈并理解代码要求,这有时可以帮助节省数据所需的一半分配空间:

(图:礼貌scikit-learn测试基于numpy或BLAS直接调用方法对内存分配包络的影响)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读