pyplot: действительно медленное создание heatmaps

У меня есть цикл, который выполняет тело приблизительно 200 раз. В каждом повторении цикла это делает сложное вычисление, и затем как отладку, я хочу произвести heatmap матрицы NxM. Но, генерация этого heatmap является невыносимо медленными и значительно медленными холмами уже медленный алгоритм.

Мой код приезжает строки:

import numpy
import matplotlib.pyplot as plt
for i in range(200):
    matrix = complex_calculation()
    plt.set_cmap("gray")
    plt.imshow(matrix)
    plt.savefig("frame{0}.png".format(i))

Матрица, от numpy, не составляет огромный---300 x 600, удваивается. Даже если я не сохраняю число и вместо этого обновляю экранный график, это еще медленнее.

Конечно, я должен злоупотреблять pyplot. (Matlab может сделать это, без проблем.), Как я ускоряю это?

5
задан carl 4 June 2010 в 05:14
поделиться

2 ответа

Попробуйте поместить plt.clf () в цикл, чтобы очистить текущий рисунок:

for i in range(200):
    matrix = complex_calculation()
    plt.set_cmap("gray")
    plt.imshow(matrix)
    plt.savefig("frame{0}.png".format(i))
    plt.clf()

Если вы этого не сделаете, цикл будет замедляться по мере того, как машина изо всех сил пытается выделить для фигуры все больше и больше памяти.

5
ответ дан 14 December 2019 в 04:31
поделиться

Я думаю, что это немного быстрее:

import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
for i in range(200):
    matrix = complex_calculation()
    ax.imshow(matrix, cmap=cm.gray)
    fig.savefig("frame{0}.png".format(i))

plt.imshow вызывает gca , который вызывает gcf , который проверяет, есть ли фигура; если нет, он создает его. Если сначала создать экземпляр фигуры вручную, вам не нужно этого делать.

3
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: