小编Jam*_*mes的帖子

如何在python中循环遍历大型数据集而不会出现MemoryError?

我有一大系列栅格数据集,代表了几十年来的月降雨量.我用Python编写了一个循环遍历每个栅格的脚本并执行以下操作:

  1. 将栅格转换为numpy蒙版数组,
  2. 执行大量的数组代数来计算新的水位,
  3. 将结果写入输出栅格.
  4. 重复

该脚本只是一个由循环语句包围的数组代数方程列表.

如果我只是在我的数据的一小部分(比如说20年的价值)上运行脚本,那么一切都运行良好,但如果我尝试处理整个数据,我会得到一个MemoryError.该错误没有提供任何更多的信息(除了它突出显示Python放弃的代码中的行).

不幸的是,我不能轻易地处理我的数据 - 我真的需要能够一次完成所有的工作.这是因为,在每次迭代结束时,输出(水位)被反馈到下一次迭代中作为起始点.

我对编程的理解目前非常基础,但我认为我的所有对象都会在每个循环中被覆盖.我(愚蠢地?)假设如果代码设法成功循环一次,那么它应该能够无限循环而不会占用越来越多的内存.

我已经尝试过阅读各种文档并发现了一些名为"垃圾收集器"的东西,但我觉得我已经超出了我的深度并且我的大脑正在融化!任何人都能提供一些基本的见解,当我的代码循环时,内存中的对象实际发生了什么?有没有一种方法可以在每个循环结束时释放内存,还是有更多的"Pythonic"编码方式可以完全避免这个问题?

python memory

10
推荐指数
2
解决办法
1万
查看次数

标签 统计

memory ×1

python ×1