Necesitamos tu ayuda para compartir nuestras crónicas sobre las ciencias informáticas.
Solución:
Hay dos partes de explicación para responder a su pregunta.
I. NPY frente a NPZ
Como ya leímos en el documento, el .npy
el formato es:
el formato de archivo binario estándar en NumPy para persistir un soltero número arbitrario array en disco … El formato está diseñado para ser lo más simple posible mientras logra sus objetivos limitados. (fuentes)
Y .npz
es solo un
forma sencilla de combinar múltiple arreglos en un solo archivo, uno puede usar ZipFile para contener múltiples “
.npy
” archivos. Recomendamos usar la extensión de archivo “.npz
” para estos archivos. (fuentes)
Asi que, .npz
es solo un ZipFile que contiene múltiples “.npy
” archivos. Y este ZipFile puede ser ya sea comprimido (usando np.savez_compressed
) o sin comprimir (usando np.savez
).
Es similar al archivo tarball en un sistema similar a Unix, donde un archivo tarball puede ser solo un archivo sin comprimir que contiene otros archivos o un archivo comprimido al combinarlo con varios programas de compresión (gzip
, bzip2
etc.)
II. Diferentes API para serialización binaria
Y Numpy también proporciona diferentes API para producir estos archivos binarios:
np.save
—> Guardar un array a un archivo binario en NumPy.npy
formatonp.savez
–> Guarde varias matrices en un solo archivo en sin comprimir.npz
formatonp.savez_compressed
–> Guarde varias matrices en un solo archivo en comprimido.npz
formatonp.load
–> Cargar arreglos u objetos decapados desde.npy
,.npz
o archivos en escabeche
Si hojeamos el código fuente de Numpy, debajo del capó, hay:
def _savez(file, args, kwds, compress, allow_pickle=True, pickle_kwargs=None):
...
if compress:
compression = zipfile.ZIP_DEFLATED
else:
compression = zipfile.ZIP_STORED
...
def savez(file, *args, **kwds):
_savez(file, args, kwds, False)
def savez_compressed(file, *args, **kwds):
_savez(file, args, kwds, True)
Entonces volvamos a la pregunta:
Si solo uso np.save
no hay más compresión en la parte superior de la .npy
formato, solo un único archivo de almacenamiento para la conveniencia de administrar múltiples archivos relacionados.
si uso np.savez_compressed
luego, por supuesto, menos memoria en el disco debido a más tiempo de CPU para realizar el trabajo de compresión (es decir, un poco más lento).
La principal ventaja es que las matrices tienen carga diferida. Es decir, si tienes un npz
archivo con 100 matrices, puede cargar el archivo sin cargar ninguno de los datos. Si pides una sola arraysolo los datos para eso array está cargado.
Una desventaja para npz
archivos es que no pueden ser mapeados en memoria (usando load(
), por lo que para arreglos grandes puede que no sean la mejor opción. Para los datos en los que las matrices tienen una forma común, sugiero echar un vistazo a las matrices estructuradas. Estos pueden ser mapeados en memoria, permiten acceder a datos con sintaxis similar a dict (es decir, arr['field']
), y son muy eficientes en cuanto a memoria.
Sección de Reseñas y Valoraciones
Si crees que ha resultado de provecho este post, te agradeceríamos que lo compartas con más juniors de esta manera nos ayudas a dar difusión a nuestro contenido.