Ответы на ваш вопрос состоят из двух частей.
I. NPY против NPZ
Как мы уже читали из документа, формат .npy
:
стандартный двоичный формат файла в NumPy для сохранения одного произвольного массива NumPy на диске. ... Формат разработан так, чтобы быть максимально простым при достижении своих ограниченных целей. ( источники )
А .npz
- это всего лишь
простой способ объединения нескольких массивов в один файл, можно использовать ZipFile для хранения нескольких файлов «.npy
». Мы рекомендуем использовать расширение файла «.npz
» для этих архивов. ( источники )
Итак, .npz
- это просто ZipFile, содержащий несколько файлов «.npy
». И этот ZipFile может быть сжатым (используя np.savez_compressed
) или несжатым (используя np.savez
) .
Это похоже на файл архива tarball в Unix-подобной системе, где файл tarball может быть просто несжатым файлом архива, который содержит другие файлы или сжатый файл архива, в сочетании с различными программами сжатия (gzip
, bzip2
и т. Д.)
II. Различные API для двоичной сериализации
И Numpy также предоставляет различных API для вывода этих двоичных файлов:
np.save
---> Сохранить массив в двоичный файл в формате NumPy .npy
np.savez
-> Сохранить несколько массивов в одном файле в без сжатия .npz
в формате
np.savez_compressed
-> Сохранить несколько массивов в один файл в сжатом .npz
формате
np.load
-> Загрузка массивов или засоленных объектов из .npy
, .npz
или засоленных файлов
Если мы просматриваем исходный код Numpy, под капотом , есть:
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)
Тогда вернемся к вопросу:
Если используется только np.save
, в верхней части формата .npy
сжатия больше нет, только один файл архива для удобства управления несколькими связанными файлами.
Если использовать np.savez_compressed
, то, конечно, меньше памяти на диске из-за большего количества процессорного времени, чтобы выполнить работу сжатия (то есть немного медленнее).