gpt4 book ai didi

python - Python3内存错误的根源是什么?以及如何解决?

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:12 25 4
gpt4 key购买 nike

我想循环绘制 .csv 文件。通过在 Stack 中四处搜索,我找到了使用 plt.figure() 的解决方案。当我为 2 个文件运行它时,这确实解决了我的问题。但是当我尝试这 20 个文件时,它给了我内存错误。它运行到第 6 个文件,然后抛出错误。

我导入的每个 .csv 文件的大小约为 (800,000~1mil) x 10。

失败的解决方案/调试/问题的根源-

我知道当您导入大文件时,您可能会导致内存错误(再次来自 Stack 的信息)。但在这里我一遍又一遍地将文件加载到同一个变量中。因此我没有预料到内存错误,因为我没有为每个循环使用更多内存。

这不是由于单个文件的原因,因为我成功地批量运行了程序 - (1,5),(5,10),(10,15),(15-20)。但我希望这一次发生。

我试图定义绘图函数,希望能避免这个问题。但是又遇到了同样的问题。

我想我可以避免这个问题,如果我可以在每个循环完成后刷新 Python 数据库(?我的意思是浏览器中的缓存之类的东西)。但我怎样才能做到这一点?

提前致谢。

P.S - 如果我能以某种方式加快程序速度,那将是一个奖励。

这是程序

import numpy as np
import matplotlib.pyplot as plt

global n,data1
n = '/media/gautam/New Volume/IIT/Cosmology/2nd year/NEW Codes/k(0.1)_NO-DM.csv'
data1 = np.genfromtxt(n,delimiter=',',dtype=None)

for k in range(0,20):
a = '/media/gautam/New Volume/IIT/Cosmology/2nd year/NEW Codes/k_(0.1)_%d.csv'%k
data2 = np.genfromtxt(a,delimiter=',',dtype=None)
plt.figure()
diff = data1 - data2
plt.plot(np.log10(data1[:,1]),np.absolute(diff[:,6]),label='|diff_d|')
plt.xlabel('log(a)')
plt.ylabel('|diff_d|')
plt.legend()
plt.title('q_d = %d '%data2[0,10])
plt.savefig('/media/gautam/New Volume/IIT/Cosmology/2nd year/NEW Codes/Fig/k_(0.1)_%d_diff.png'%k)

最佳答案

Matplotlib documentation说:

    If you are creating many figures, make sure you explicitly call “close”
on the figures you are not using, because this will enable pylab to properly
clean up the memory.

因此,如果您遇到内存问题,请在 for 循环的底部添加对 plt.close() 的调用。

关于python - Python3内存错误的根源是什么?以及如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51043213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com