Как очистить графики, чтобы избежать утечки памяти? - PullRequest
0 голосов
/ 02 декабря 2018

Я рисую большое количество сеток фигур и получаю предупреждение:

/ home / michael / miniconda2 / envs / pt / lib / python3.6 / site-packages / matplotlib / pyplot.py: 537: RuntimeWarning: открыто более 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)

1 Ответ

0 голосов
/ 02 декабря 2018

Вам нужно решить:

  • Хотите создать одну единственную фигуру (plt.figure() вызывается один раз), затем clear фигура: plt.clf()
  • Вы хотите создать новую фигуру на каждом шаге (каждый шаг называется plt.figure()), затем close фигура.plt.close()

(В настоящее время вы делаете половину / половину, поэтому все цифры останутся открытыми и заполнят память.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...