使用defaultdict 内存被爆掉 ,内存溢出,数组太大了
来源:互联网 发布:网络砍价师 编辑:程序博客网 时间:2024/05/16 01:07
trainDataFeat = defaultdict(lambda:defaultdict(lambda:0))for user_id in userIdTrainList:for field in fieldList: feat.append(trainDataFeat[user_id][field])
说明:userIdTrainList的长度是10w+, fieldList:的长度是5000+。
defaultdict缺少的元素会默认为0,如果没有访问到,那么不会分配内存,但是一旦访问到,就会分配内存,所以,跑完两个for循环,我就会有一个上亿元素的数组,内存会爆掉。
改写一下:
trainDataFeat = defaultdict(lambda:defaultdict(lambda:0))for user_id in userIdTrainList:for field in fieldList:if field in trainDataFeat[user_id].keys(): feat.append(trainDataFeat[user_id][field]) else: feat.append(0)
因为只是少数field intrainDataFeat[user_id].keys():所以,整个数组并不会很大。
总结:内存爆掉,可能是分配的矩阵太大了,defaultdict没赋值就是默认值,默认值的项没访问过就不会分配内存,访问过,即使是默认值也会分配内存。谨记。
0 0
- 使用defaultdict 内存被爆掉 ,内存溢出,数组太大了
- Android 内存管理--------------图片太大内存溢出
- 反复使用大数组导致内存溢出?
- ListView 内存溢出 减少内存使用
- 使用mtrace检查内存溢出
- 使用mtrace检查内存溢出
- 使用mtrace检查内存溢出
- list使用时内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- 内存溢出
- Objective--C 导航视图控制器
- Arduino - 看门狗定时器(WDT:Watch Dog Timer)
- Android EventBus源码解析
- 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
- C#委托最简单的示例!
- 使用defaultdict 内存被爆掉 ,内存溢出,数组太大了
- Objective--C 导航视图控制器
- 尾部的零
- 数据结构实践项目之校园导航系统
- nexus中自定义仓库
- C++数组
- SqlServer与Oracle语法差异
- 基于顺序表的两个非递减有序表的合并
- 数据库连接