Tengo un código Python cuya salida es una matriz de tamaño, cuyas entradas son todas del tipo float
. Si lo guardo con la extensión, .dat
el tamaño del archivo es del orden de 500 MB. Leí que el uso h5py
reduce considerablemente el tamaño del archivo. Entonces, digamos que tengo la matriz numpy 2D nombrada A
. ¿Cómo lo guardo en un archivo h5py? Además, ¿cómo leo el mismo archivo y lo pongo como una matriz numérica en un código diferente, ya que necesito hacer manipulaciones con la matriz?
100
.dat
extensión?np.savetxt("output.dat",A,'%10.8e')
np.save('output.dat', A)
que lo guardará en un formato binario (mucho más rápido, se usa mucho menos espacio).A = np.loadtxt('output.dat',unpack=True)
h5py
¿no crea archivos más pequeños de lo que lonp.save
harían? esh5py
más rápido quenp.save
para matrices del tamaño dado en la pregunta?Respuestas:
h5py proporciona un modelo de conjuntos de datos y grupos . El primero es básicamente matrices y el segundo se puede considerar como directorios. Cada uno tiene un nombre. Debería consultar la documentación de la API y los ejemplos:
http://docs.h5py.org/en/latest/quick.html
Un ejemplo simple en el que está creando todos los datos por adelantado y solo desea guardarlos en un archivo hdf5 se vería así:
Luego puede volver a cargar esos datos usando: '
Definitivamente echa un vistazo a los documentos:
http://docs.h5py.org
Escribir en un archivo hdf5 depende de h5py o pytables (cada uno tiene una API de Python diferente que se encuentra en la parte superior de la especificación del archivo hdf5). También debe echar un vistazo a otros formatos binarios simples proporcionados por numpy de forma nativa, como
np.save
,np.savez
etc.http://docs.scipy.org/doc/numpy/reference/routines.io.html
fuente
data.h5
existe, pero no puedo verlo con HDFView. Puedo leer el contenido con h5py, pero no inspeccionarlo con HDFView. ¿Alguna idea de por qué?Una forma más limpia de manejar archivos abiertos / cerrados y evitar pérdidas de memoria:
Deberes:
Escribir:
Leer:
fuente
with
característica de Python se conoce como administrador de contexto. Se asegurará de que el archivo se cierre después de que se haya utilizado. Más información está disponible en la documentación oficial: docs.python.org/3/library/contextlib.html