加速Matplotlib?

Dav*_*ton 14 python plot matplotlib data-analysis

我在这里读到matplotlib擅长处理大型数据集.我正在编写一个数据处理应用程序并将matplotlib图形嵌入到wx中,并且发现matplotlib在处理大量数据时都是可怕的,无论是速度还是内存方面.有没有人知道一种方法来加速(减少内存占用)matplotlib而不是下采样输入?

为了说明matplotlib与内存有多糟糕,请考虑以下代码:

import pylab
import numpy
a = numpy.arange(int(1e7)) # only 10,000,000 32-bit integers (~40 Mb in memory)
# watch your system memory now...
pylab.plot(a) # this uses over 230 ADDITIONAL Mb of memory
Run Code Online (Sandbox Code Playgroud)

小智 5

下采样在这里是一个很好的解决方案——在 matplotlib 中绘制 10M 点会消耗大量内存和时间。如果您知道可以接受多少内存,那么您可以根据该数量进行下采样。例如,假设 1M 点需要额外 23 MB 的内存,并且您发现它在空间和时间方面是可以接受的,因此您应该进行下采样,使其始终低于 1M 点:

if(len(a) > 1M):
   a = scipy.signal.decimate(a, int(len(a)/1M)+1)
pylab.plot(a)
Run Code Online (Sandbox Code Playgroud)

或者像上面的代码片段(上面的代码可能会过于激进地降低采样率,不符合你的口味。)

  • 大卫 - 如果你“更聪明地”解决了这个问题,你会介意分享吗?您可以将自己的答案标记为“已解决”,并可能获得几票... (5认同)
  • 简单的抽取是不够的,据我所知,这就是 Matplotlib 在内部所做的。我不想简单地抽取的原因是您会丢失每个抽取间隔中的极值。如果信号在一个间隔内有一个尖锐的尖峰,除非您对这些间隔非常幸运,否则您根本不会在图中看到它。我写了一些更智能的代码,取每个抽取间隔的极值而不是间隔中心(或边缘)的值。我接受你的回答,因为这主要是我所做的。 (2认同)