Я хотел бы знать правильный способ освобождения памяти после того, как сюжет сделан, так как я получаю ошибку RuntimeError: Could not allocate memory for image
при построении нескольких изображений в цикле.matplotlib: освобождение памяти после завершения графика
В настоящее время я следующие команды в другом коде на якобы сделать только что:
import matplotlib.pyplot as plt
# The code
.....
# Make plot
fig = plt.figure()
# Plotting stuff.
plt.imshow(...)
plt.plot(...)
plt.scatter(...)
# Save plot to file.
plt.savefig(...)
# Release memory.
plt.clf()
plt.close()
Комментарий в this answer утверждает, что правильный синтаксис фактически plt.close(fig)
но наибольшее количество голосов ответ given here говорит, что plt.clf()
достаточно и не упоминается .close
.
Вопросы: что является (являются) правильной командой для освобождения памяти после сохранения графика в файл? Нужны ли мне как .clf
, так и .close
или один из них достаточно?
Не могли бы вы немного расширить свой ответ? Что делать, если я не использую 'imshow' на своих участках? Что делает вызов 'set_data'? – Gabriel
Вы не показали, как вы рисуете свои изображения, поэтому 'plt.imshow' был просто образованным предположением. 'set_data' будет обновлять объект AxesImage в этом случае с новыми данными, а не создавать новый объект изображения, который, кажется, дает вам проблемы с памятью. – wim
Спасибо @wim. Я иногда использую 'imshow', но не исключительно. Я также использую 'plt.plot()' и 'plt.scatter()', поэтому я не уверен, как это можно применить к этим случаям, я обновлю вопрос, чтобы сделать это более понятным. – Gabriel