python - 批量保存数据到图像: need speedup

标签 python numpy matplotlib

我需要将大量(例如一百万)图像保存到磁盘,从数据开始。 我可以使用 matplotlib 来实现这一点,但过程很慢。 我分析了我的脚本,发现瓶颈是以下几行:

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

我的数据存储在形状为 56 x 56 的 numpy.array 中。

代码如下:

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 来实现相同的目的结果。

最佳答案

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

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)

关于python - 批量保存数据到图像: need speedup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47510617/

相关文章:

python - 以特定格式反向打印列表中的元素

python - Python 中的 OpenCV - 操作像素

python - 带有 TikZ 样式路径装饰的 Matplotlib 注释箭头

python - Break//在matplotlib的x轴上

python - 我如何为 Windows 安装 xgoogle?

python - 如何对包含数字的字符串列表进行数字排序?

python - Keras:ValueError:检查输入时出错

python - Matplotlib 面向对象的代码在笔记本中内联显示

python - 拆分单元格值并更新现有列

python - Python 中统计模型中的 ADF 测试