将数据批量保存到图像:需要加速

时间:2017-11-27 12:05:35

标签: python numpy matplotlib

我需要从数据开始向磁盘保存很多(比方说一百万)图像。 我可以使用matplotlib实现此目的,但过程很慢。 我描述了我的脚本,发现瓶颈就是这些线:

  • ax = plt.Axes(fig, [0., 0., 1., 1.])
  • fig.clf()

我的数据为numpy.array,形状为56 x 56。

以下是代码:

import matplotlib as mpl
mpl.use('Agg')
import numpy as np
import matplotlib.pyplot as plt

for i in range(num_events):
    image = create_camera_image(evts, i) # this gives me back the image in a numpy.array of shape 56 x 56

    fig = plt.figure(frameon=False)
    fig.set_size_inches(1, 1)
    ax = plt.Axes(fig, [0., 0., 1., 1.]) # most expensive line
    ax.set_axis_off()
    fig.add_axes(ax)
    ax.imshow(image, filternorm=90, interpolation='nearest', origin='lower', cmap='hot')
    fig.savefig('filename'+str(i)+'.png', dpi=224)
    fig.clf() # second most expensive line

有更高效的方法吗? 我相信matplotlib 不是最好的选择,但我不能使用pillowopencv之类的其他库来实现相同的结果。

1 个答案:

答案 0 :(得分:1)

创建图形,轴和图像一次肯定更有效,只用新数据更新它,而不是为每个图像创建它们。

import matplotlib as mpl
mpl.use('Agg')
import numpy as np
import matplotlib.pyplot as plt

num_events = 10

def create_camera_image(i):
    return np.random.rand(56,56)

fig = plt.figure(figsize=(1,1),frameon=False)
ax = fig.add_axes([0,0,1,1])
ax.set_axis_off()

nullimage = np.zeros((56,56))
im = ax.imshow(nullimage, interpolation='nearest', origin='lower', 
               cmap='hot', vmin=0,vmax=1)

for i in range(num_events):
    image = create_camera_image(i)
    im.set_data(image)

    fig.savefig('filename'+str(i)+'.png', dpi=224)