我正在研究一个更大的项目,在那里我看到内存使用量连续增加。代码类似于我在下面狙击的演示 - 只是没有随机数和更有用的计算......但效果是一样的。运行这个我看到内存使用量增加
为什么会发生这种情况,我该如何防止这种情况? 感谢您的每一个有用的答案:)
我正在使用 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 将我的计算结果存储在已分配的内存中?
实际上,内存使用量增加是因为 numpy 优化了内存中零数组的存储。因此,当您填写大量零时,numpy 无法有效地存储它。
观察如果创建零数组,内存使用情况会发生什么情况:
data = np.zeros(1000000000)
然后看看当你创建一个数组时会发生什么:
data = np.ones(1000000000)
您将看到内存使用量急剧增加。