2016-04-09 123 views
2

我想從2D矩陣中找出儘可能多的數據可視化工具(對於查看2D矩陣的任何其他好方法都是額外的)。爲什麼plt.imshow比plt.pcolor快得多?

我生成了很多熱點地圖,我被告知pcolor是要走的路(我現在使用seaborn)。

爲什麼plt.imshowplt.pcolor要快得多?

def image_gradient(m,n): 
    """ 
    Create image arrays 
    """ 
    A_m = np.arange(m)[:, None] 
    A_n = np.arange(n)[None, :] 
    return(A_m.astype(np.float)+A_n.astype(np.float)) 

A_100x100 = image_gradient(m,n) 

%timeit plt.pcolor(A_100x100) 
%timeit plt.imshow(A_100x100) 

1 loop, best of 3: 636 ms per loop 
1000 loops, best of 3: 1.4 ms per loop 
+0

可能存在重複的問題?參見:http://stackoverflow.com/questions/7470288/matplotlib-pcolor-very-slow-alternatives – Alejandro

回答

2

部分回答你的問題,plt.imshow比plt.pcolor 更快,因爲他們沒有做類似的操作。事實上,他們做了非常不同的事情。

根據文檔,matplotlib.pyplot.pcolor返回一個matplotlib.collections.PolyCollection,與pcolormesh相比,它會比較慢,它會返回一個matplotlib.collections.QuadMesh對象。另一方面,imshow返回一個matplotlib.image.AxesImage對象。我做了令pColor,imshow和pcolormesh測試:

def image_gradient(m,n): 
    """ 
    Create image arrays 
    """ 
    A_m = np.arange(m)[:, None] 
    A_n = np.arange(n)[None, :] 
    return(A_m.astype(np.float)+A_n.astype(np.float)) 

m = 100 
n = 100 

A_100x100 = image_gradient(m,n) 

%time plt.imshow(A_100x100) 
%time plt.pcolor(A_100x100) 
%time plt.pcolormesh(A_100x100) 

和我得到的結果是:

imshow() 
CPU times: user 76 ms, sys: 0 ns, total: 76 ms 
Wall time: 74.4 ms 
pcolor() 
CPU times: user 588 ms, sys: 16 ms, total: 604 ms 
Wall time: 601 ms 
pcolormesh() 
CPU times: user 0 ns, sys: 4 ms, total: 4 ms 
Wall time: 2.32 ms 

顯然,對於這個特殊的例子,pcolormesh是最有效的一個。

相關問題