我正在尝试从2D矩阵中找出尽可能多的数据可视化工具(要点是查看2D矩阵的任何其他好的方法)。

我生成了许多热图,有人告诉我pcolor是要走的路(我现在使用seaborn)。

为什么plt.imshow在进行真正相似的操作时比plt.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

最佳答案

部分回答您的问题,因为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是最有效的示例。

关于python - 为什么plt.imshow比plt.pcolor快得多?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36513406/

10-16 12:58