如何解决python循环中的内存管理
for i in [i1,i2,.....]:
for j in [j1,j2,.....]:
for k in [k1,k2,.....]:
for l in [l1,l2,.....]:
for m in [m1,m2,.....]:
loop_variables = some computation on i,j,k,l,m
np.save('matrix.npy',loop_variables)
这段代码让我的笔记本电脑死机了。因此,我按照以下方式使用了 itertools
、del
、gc
。
import itertools
import gc
i = [i1,.....]
j = [j1,.....]
k = [k1,.....]
l = [l1,.....]
m = [m1,.....]
lst = [i,m]
f_lst = itertools.product(*lst)
del i,m,lst
for i,m in f_lst:
loop_variables = some computation on i,m
np.save('matrix.npy',loop_variables)
del loop_variables,i,m
gc.collect()
但问题依然存在。我有以下问题
解决方法
每次打开文件都会产生费用。
一般而言,在内循环中使用多少 CPU 与为减少 CPU 使用而消耗多少 RAM 之间存在权衡。即您是否收集结果并稍后写出(并且可能在收集时耗尽内存)。
以下是示例的修剪版本的 jupyter 笔记本结果。使用 'with' 大大加快了速度。
import numpy as np
import os
%%timeit
try:
os.remove('a.npy')
except:
pass
for i in range(10):
for j in range(10):
x = np.arange(10)
np.save('a.npy',x)
# 36 ms ± 746 µs per loop (mean ± std. dev. of 7 runs,10 loops each)
%%timeit
try:
os.remove('b.npy')
except:
pass
with open('b.npy','wb') as f:
for i in range(10):
for j in range(10):
x = np.arange(10)
np.save(f,x)
# 11.9 ms ± 184 µs per loop (mean ± std. dev. of 7 runs,100 loops each)
编辑:numpy doc's 表示保存附加但是'a.npy'和'b.npy'的大小不同所以......我不信任'a.npy'。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。