在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直接调用方法对内存分配包络的影响) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |