我正在开展一个更大的项目,我看到内存使用量持续增长。代码类似于下面我的演示 - 只是没有随机数和更有用的计算......但效果是一样的。运行这个我看到增加内存使用
为什么会发生这种情况,我该如何防止这种情况发生? 谢谢你的每一个有用的答案:)
我正在使用python 3
n= 10000000
indat = np.random.random(n*4)
data = np.zeros(n*3)
d = [0,0,0,0]
for i in range(n):
d = indat[i*4:i*4+4]
data[i*3] = np.sqrt(np.abs(d[0]+d[1]*d[3]))
data[i*3+1]= np.sqrt(np.abs(d[3]+d[2]*d[3]))
data[i*3+2]= np.sqrt(np.abs(d[2]+d[1]*d[3]))
编辑: 我尝试了更多的东西:
1:这可以正常工作 - 没有内存增加
for i in range(n):
print(i, end="\r")
2:但是有了这个增加。
for i in range(n):
data[i] = indat[i]**2
所以至少这个简单的副本不能正常工作,因为我希望... 如何让python将计算结果存储在已分配的内存中?
答案 0 :(得分:0)
实际上,内存使用率的增加是因为numpy优化了零数组在内存中的存储。因此,当您填写较大的零数组时,numpy无法有效地存储它。
如果创建一个零数组,请注意内存使用情况会发生什么:
data = np.zeros(1000000000)
然后看看创建一个数组时会发生什么:
data = np.ones(1000000000)
您会发现内存使用量急剧增加。