Generación de imágenes de pcolormesh a partir de conjuntos de datos muy grandes guardados en archivos H5 con Python

Estoy recostackndo una gran cantidad de datos que se guardarán en archivos H5 individuales utilizando h5py. Me gustaría unir estas imágenes en una sola gráfica de pcolormesh para guardarlas como una sola imagen.

Un ejemplo rápido en el que he estado trabajando genera arrays de 2000×2000 puntos de datos aleatorios y los guarda en archivos H5 usando h5py. Luego trato de importar los datos en estos archivos e bash trazarlos en matplotlib como una pcolormesh, pero siempre me encuentro con un error de memoria (que se espera).

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) 

Este script genera mis archivos. Escogí 100 como un número arbitrario solo para tener un conjunto suficientemente grande de archivos para extraer.

Luego los importo usando el siguiente script:

 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() 

El valor del rango en el bucle for puede modificarse hasta 100, pero el valor máximo que puedo elegir sin un error de memoria es 5 (es decir, se pueden parchear 5 plots en una plot de pcolormesh en matplotlib) y es extremadamente lento y lento. Necesito poder unir muchas imágenes.

¿Hay alguna otra técnica que deba usar para trazar estos datos? O sería bueno si pudiera convertir los datos de varios archivos H5 en una imagen sin pasar por matplotlib o un progtwig similar (como scipy).

En resumen, mi problema es este:

  • Tengo un gran número de archivos HDF5 con datos de imagen (2000×2000)
  • Necesito parchear estos archivos en una sola imagen y guardarlos

Cualquier ayuda es apreciada. Además, me complacerá responder cualquier otra pregunta sobre mi problema.


Editar (5.6.2013):

Creo que una pregunta similar sería cómo tratar (importar, manipular, editar, etc.) imágenes de muy alta resolución en Python. Esto es esencialmente lo que estoy tratando de hacer; generar una imagen de muy alta resolución a partir de una colección de imágenes más pequeñas.

Una forma de reducir la hinchazón de las imágenes en matplotlib (especialmente cuando se guardan en SVG) es usar rasterized=True kwarg. Básicamente, esto “aplanará” su pcolormesh, lo que lo hace mucho más rápido para ahorrar, usa menos recursos, etc.