2016-04-09 31 views
2

2D matrislerden alabildiğim kadar çok veri görselleştirme aracı bulmaya çalışıyorum (bonus noktaları 2D matrislere bakmak için diğer iyi yöntemlere).Neden plt.pcolor'dan çok daha hızlı görünüyor?

pcolor yolunun anlatıldığı pek çok ısı haritası oluşturuyorum (şimdi seaborn kullanıyorum).

Neden plt.imshow Gerçekten benzer işlemler yaparken plt.pcolor'dan çok daha hızlı?

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

Olası bir yinelenen soru mu? Bakınız: http://stackoverflow.com/questions/7470288/matplotlib-pcolor-very-slow-alternatives – Alejandro

cevap

2

Sorunuza kısmen yanıtlayan plt.imshow onlar benzer operasyonları yapmıyorlar çünkü plt.pcolor çok daha hızlıdır. Aslında, çok farklı şeyler yaparlar.

Belgeye göre, matplotlib.pyplot.pcolor, matplotlib.collections.QuadMesh nesnesini döndüren pcolormesh ile karşılaştırıldığında yavaş bir matplotlib.collections.PolyCollection döndürür. Diğer yandan imshow, bir matplotlib.image.AxesImage nesnesini döndürür. I pcolor, imshow ve pcolormesh olan bir test yaptı:

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) 

ve elde Sonuçlar şu şekildedir:

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 

Açıkçası, bu özel örneğin pcolormesh etkin olan bir yöntemdir.