【问题标题】:Generating pcolormesh images from very large data sets saved in H5 files with Python使用 Python 从保存在 H5 文件中的非常大的数据集生成 pcolormesh 图像
【发布时间】:2013-05-31 02:16:33
【问题描述】:

我正在收集大量数据,这些数据将使用 h5py 保存到单个 H5 文件中。我想将这些图像拼凑成一个 pcolormesh 图以保存为单个图像。

我一直在研究的一个简单示例生成 2000x2000 随机数据点的数组,并使用 h5py 将它们保存在 H5 文件中。然后我尝试将这些文件中的数据导入并尝试在 matplotlib 中将其绘制为 pcolormesh,但我总是遇到 memoryError(这是预期的)。

import numpy
import h5py
arr = numpy.random.random((2000,2000))

with h5py.File("TEST_HDF5_SAVE_FILES\\Plot_0.h5", "w") as f:
    dset = f.create_dataset("Plot_0", data = arr)

for i in range(1,100):
    arr = numpy.random.random((2000,2000))
    with h5py.File("TEST_HDF5_SAVE_FILES\\Plot_" + str(i) + ".h5", "w") as f:
        dset = f.create_dataset("Plot_" + str(i), data = arr)

这个脚本生成我的文件。我选择了 100 作为任意数字,只是为了有足够大的文件集可供提取。

然后我使用以下脚本导入它们:

y = numpy.arange(0, 2000, 1)

for display_plot_num in range(0, 5):
    print display_plot_num
    x = numpy.arange(display_plot_num*2000, display_plot_num*2000 + 2000, 1)

    with h5py.File("TEST_HDF5_SAVE_FILES\\Plot_" + str(display_plot_num) + ".h5", "r+") as f:
        data = f["Plot_" + str(display_plot_num)]
        plt.pcolormesh(x, y, data)
plt.show()

for 循环中的范围值可以更改到 100,但我可以选择的最大值是 5(即可以在 matplotlib 中的 pcolormesh 图上修补 5 个图),而且它非常笨重而且慢。我需要能够将许多图像拼凑在一起。

我应该使用其他技术来绘制这些数据吗?或者,如果我可以将多个 H5 文件中的数据转换为图像而不通过 matplotlib 或类似程序(如 scipy),那就太好了。

总之,我的问题是这样的:

  • 我有大量带有图像数据 (2000x2000) 的 HDF5 文件
  • 我需要将这些文件拼凑成一个图像并保存

感谢任何帮助。另外,我很乐意回答有关我的问题的任何其他问题。


编辑(5.6.2013):

我觉得类似的问题是如何在 Python 中处理(导入、操作、编辑等)高分辨率图像。这基本上就是我想要做的;从一组较小的图像中生成非常高分辨率的图像。

【问题讨论】:

  • 尝试使用imshowinterpolation="none" 而不是pcolormesh。您需要更改指定图像位置的方式(例如,使用 extent kwarg 而不是传入 x 和 y),但它应该更快。
  • 你能下样吗?
  • 什么是数据类型?你能以较低的精度逃脱吗?我怀疑你的眼睛能分辨出 float32 和 float64(或 int16)之间的区别
  • 如果你不需要它是交互式的,只需使用cmap进行颜色映射,然后使用PIL直接保存到磁盘

标签: python matplotlib hdf5 h5py large-data


【解决方案1】:

减少 matplotlib 中图像膨胀的一种方法(尤其是在保存到 SVG 时)是使用 rasterized=True kwarg。这将基本上“扁平化”您的 pcolormesh,从而更快地保存、使用更少的资源等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多