Python中文
首页
教程
问答
标签
搜索
登录
注册
如何在python中循环遍历大型数据集而不获取MemoryError?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一大系列的栅格数据集,代表了几十年来的月降雨量。我用Python编写了一个脚本,它在每个光栅上循环,并执行以下操作:</p> <ol> <li>将光栅转换为numpy蒙面数组</li> <li>执行大量的数组代数来计算新的水位</li> <li>将结果写入输出光栅。</li> <li>重复</li> </ol> <p>脚本只是一个由循环语句括起来的数组代数方程的长列表。</p> <p>如果我只是在我的一小部分数据上运行脚本(比如说20年),一切都会很好,但是如果我尝试处理所有数据,我会得到一个<code>MemoryError</code>。这个错误没有提供更多的信息(除了它突出显示了Python放弃的代码行)。</p> <p>不幸的是,我不能很容易地把我的数据分块处理——我真的需要能够同时处理所有的事情。这是因为,在每次迭代结束时,输出(水位)作为起点反馈到下一次迭代中。</p> <p>目前我对编程的理解是非常基础的,但是我认为我的所有对象都会被每个循环覆盖。我(傻了?)假设如果代码成功循环一次,那么它应该能够无限循环,而不会占用越来越多的内存。</p> <p>我试过阅读各种各样的文件,发现了一种叫做“垃圾收集器”的东西,但我觉得我已经超出了我的深度,我的大脑正在融化!有谁能提供一些基本的洞察,当我的代码循环时,内存中的对象实际发生了什么?在每个循环的末尾是否有释放内存的方法,或者是否有一些更“Pythonic”的编码方法可以完全避免这个问题?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>del语句是“强制”垃圾收集器清除临时循环对象的一种快速方法:</p> <pre><code>for obj in list_of_obj: data = obj.getData() do_stuff(data) del data </code></pre> <p>这迫使解释器删除并释放临时对象。注意:这不能确保程序在计算的其他部分不会泄漏或消耗内存,这只是一个快速检查</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
上传图片使用Django Ckeditor获取服务器错误(500)
5 回答
上传图片到 Google App Engine,来自非网页客户端
5 回答
上传图片到Djang的cloudinary
4 回答
上传图片到Flask
8 回答
上传图片到googleappengine并与用户分享图片
1 回答
上传图片到googlecolab,并使用Keras预测分类
8 回答
上传图片到s3python
6 回答
上传图片到s3后,上传附带的拇指
10 回答
上传图片在Django,希望是一个循序渐进的指南?
5 回答
上传图片并显示在Django 2.0模板上
5 回答
上传图片时创建动态路径
9 回答
上传多个图像会破坏除第一个Flas之外的所有内容
7 回答
上传多个文件上传文件FastAPI
7 回答
上传多个文件到Django
9 回答
上传多张图片
9 回答
上传大数据到谷歌硬盘给400
9 回答
上传大文件nginx+uwsgi
1 回答
上传大文件不工作谷歌驱动Python API
4 回答
上传大文件到S3
8 回答
上传大文件太慢
2 回答