我想用matplotlib生成一些PDF文件。我的主要问题是matplotlib很慢,每个文件占用0.5秒。
我试图弄清楚为什么要花这么长时间,我编写了以下测试程序,只是将一条非常简单的曲线绘制成PDF文件:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
X = range(10)
Y = [ x**2 for x in X ]
for n in range(100):
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)
ax.plot(X, Y)
fig.savefig("test.pdf")
但即使是这样简单的事情也需要很多时间:对于100个PDF文件,总共需要15-20秒(现代的Intel平台,我尝试了MacOSX和Linux系统)。
有没有什么技巧和技巧可以用来加速matplotlib中PDF的生成?显然,我可以在多核平台上使用多个并行线程,但是我还能做些什么吗?
Matplotlib在创建图形等方面有很多开销,甚至在保存到pdf之前也是如此。因此,如果你的绘图相似,你可以通过重用元素来保护很多“设置”,就像你在matplotlib的动画示例中所看到的一样。在
在本例中,可以重用图形和轴:
请注意,这没有多大帮助。通过重用这些行,您可以节省更多:
^{pr2}$对我来说,这个速度几乎是初始示例的两倍。这只是一个选项,如果你做了相似的情节,但如果他们非常相似,它可以加快很多事情。matplotlib animation examples可能对这种优化有启发。在
如果可行,可以使用多进程来执行此操作(假设您的计算机上有多个内核):
注意:以下代码将在您机器上的当前目录中生成40个PDF文件
它不能完美地缩放,但是我在我的4个核心上做了这个(双核超调),得到了显著的提升:
^{pr2}$我确信mpl的pdf后端有很多性能改进的空间,但这并不是您所追求的时间尺度。在
嗯
您可以使用Report Lab。开源版本应该足够做你想做的事情。它应该比使用matplotlib生成pdf要快得多。在
相关问题 更多 >
编程相关推荐