gpt4 book ai didi

python - 使用 python 绘制数千个文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:38 25 4
gpt4 key购买 nike

我有顺序或 10^5 个二进制文件,我在 for 循环中用 numpy 的 fromfile 一个一个地读取它们,并用 pyplot 的 imshow。每个文件大约需要一分钟的时间来阅读和绘制。

有没有办法加快速度?

下面是一些伪代码来解释我的情况:

#!/usr/bin/env python

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

import matplotlib.pyplot as plt

nx = 1200 ; ny = 1200

fig, ax = plt.subplots()
ax.set_xlabel('x')
ax.set_ylabel('y')

for f in files:
data = np.fromfile(open(f,'rb'), dtype=float32, count=nx*ny)
data.resize(nx,ny)
im = ax.imshow(data)
fig.savefig(f+'.png', dpi=300, bbox_inches='tight')
im.remove()

我发现最后一步很关键,这样内存就不会爆炸

最佳答案

由于图像数量非常大,并且您正在使用 imshow,我建议采用不同的方法。

  1. 创建一个具有所需尺寸和空白图像的输出文件(任何颜色都可以,只要它与书脊颜色不同)
  2. 将图形保存到template.png
  3. 使用scipy.ndimage.imread加载template.png
  4. 将图像数据加载到一个数组中
  5. 使用颜色图将您的数据转换为颜色
  6. 缩放图像以适合模板的像素尺寸(scipy.ndimage.zoom)
  7. 将像素数据复制到模板中
  8. 通过 scipy.ndimage.save 保存结果图像
  9. 根据需要多次重复步骤 4 - 8

这会绕过很多渲染的东西。一些评论:

  • 第 1 步可能需要花很多功夫(特别是抗锯齿可能需要注意,在书脊的边缘有清晰的黑白边框是有益的)
  • 如果第 4 步很慢(我不明白为什么),请尝试 numpy.memmap
  • 如果可以,尝试使用可以通过简单的算术运算生成数据的颜色图(例如,灰度、带 Gamma 的灰度等),那么您可以使第 5 步更快
  • 如果您可以接受数据未缩放的图像(即原始 imshow 使用的区域为 1200x1200),则可以摆脱缓慢的缩放操作(第 6 步);如果您可以按整数进行缩减采样,这也会有所帮助
  • 如果您需要在步骤 6 中对图像进行重新采样,您还可以检查 cv2 (OpenCV) 模块中的函数,它们可能比 scipy 中更通用的函数更快。 ndimage

就性能而言,最慢的操作是 5、6 和 9。我希望该函数每秒能够处理十个数组。在此之上,磁盘 I/O 将开始成为一个限制因素。如果处理步骤是限制因素,我将只启动脚本的四个(假设有四个核心)副本,每个副本都可以访问不同的 2.5 x 10^4 图像集。对于 SSD 磁盘,这不应导致 I/O 寻道灾难。

不过,只有分析才能说明问题。

关于python - 使用 python 绘制数千个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25432249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com