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

时间:2018-06-26 12:41:55

标签: python python-3.x matplotlib memory

我想循环绘制.csv文件。通过在Stack中搜索,我发现解决方案是使用plt.figure()。当我为2个文件运行它时,确实解决了我的问题。但是当我尝试这20个文件时,它给了我MEMORY ERROR。它运行到第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)

1 个答案:

答案 0 :(得分:1)

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.

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