2010-06-04 111 views
5

我有一個循環執行約200次的身體。在每次循環迭代中,它會進行復雜的計算,然後作爲調試,我希望生成一個NxM矩陣的熱圖。但是,生成這個熱圖非常緩慢,而且已經很慢的算法顯着減慢。pyplot:真的很慢創建熱圖

我的代碼是沿着線:

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×600雙打。即使我不保存這個數字,而是更新了一個屏幕上的情節,它甚至更慢。

當然,我必須濫用pyplot。 (Matlab可以做到這一點,沒有問題。)我如何加快速度?

回答

5

嘗試把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() 

如果你不這樣做,循環減慢的機器鬥爭爲數字分配越來越多的內存。

+0

仍然緩慢,但現在至少可以忍受。 – carl 2010-06-04 19:03:24

3

我認爲這是一個有點快:

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進行檢查,看是否有一個數字;如果不是,它創建一個。通過首先手動實例化圖形,您不需要完成所有工作。