我想循环绘制.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)
答案 0 :(得分:1)
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
的调用。