我正在绘制大量的图形网格,并且得到警告:
/home/michael/miniconda2/envs/pt/lib/python3.6/site-packages/matplotlib/pyplot.py:537: 运行时警告:已打开20多个数字。创造的数字 通过pyplot界面(
matplotlib.pyplot.figure
)被保留 直到显式关闭,否则可能会占用过多内存。 (控制 此警告,请参阅rcParam`figure.max_open_warning)。
更重要的是,我遇到了内存泄漏。我应该如何正确清除地块以消除这种泄漏?
def place_fig(values, rows=1, columns=1, r=0, c=0, label='test'):
ax = plt.subplot2grid((rows, columns), (r, c))
ax.hist(values, label=label)
plt.legend(loc='upper right')
ax.legend(loc='upper right')
def plot_grid(arrays, path=None, filename=''):
plt.figure()
for c in range(5):
for array, r in zip(arrays[c], range(5)):
place_fig(array, rows=5, columns=5, r=r, c=c)
plt.savefig(path + filename)
plt.clf()
def plot_layers(path=None, i=0, values_3d=None):
array1 = []
array2 = []
array3 = []
array4 = []
array5 = []
array_list = [array1, array2, array3, array4, array5]
for j in range(5):
for array, values in zip(array_list, values_3d[j]):
array.append(values)
plot_grid([array1, array2, array3, array4, array5], path=path, filename='iter_{:d}'.format(i))
for i in range(1000):
values_3d = np.random.randn(5, 5, 10000)
plot_layers(path='plots/', i=i, values_3d=values_3d)
答案 0 :(得分:0)
您需要决定:
plt.figure()
,然后创建clear
该图形:plt.clf()
plt.figure()
被称为每个步骤),然后在close
中创建图形。 plt.close()
(当前,您正在做一半/一半,因此所有数字将保持打开状态并充斥内存。)