У меня есть цикл, который выполняет тело приблизительно 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 может сделать это, без проблем.), Как я ускоряю это?
Попробуйте поместить 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()
Если вы этого не сделаете, цикл будет замедляться по мере того, как машина изо всех сил пытается выделить для фигуры все больше и больше памяти.
Я думаю, что это немного быстрее:
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
, который проверяет, есть ли фигура; если нет, он создает его. Если сначала создать экземпляр фигуры вручную, вам не нужно этого делать.