Spec-Zone.ru › NumPy 2.0

numpy.lib.format

Бинарная сериализация

Формат NPY

Простой формат для сохранения массивов NumPy на диск с полной информацией о них.

Формат .npy является стандартным двоичным форматом файла в NumPy для сохранения одного произвольного массива NumPy на диске. Формат хранит всю информацию о форме и типе данных, необходимую для правильного восстановления массива даже на другой машине с другой архитектурой. Формат разработан для максимальной простоты при достижении своих ограниченных целей.

Формат .npz является стандартным форматом для сохранения нескольких массивов NumPy на диске. Файл .npz — это zip-файл, содержащий несколько файлов .npy, по одному для каждого массива.

Возможности

  • Может представлять все массивы NumPy, включая вложенные массивы записей и массивы объектов.
  • Представляет данные в их родном двоичном виде.
  • Поддерживает массивы, размеченные в стиле Fortran, напрямую.
  • Хранит всю необходимую информацию для восстановления массива, включая форму и тип данных на машине с другой архитектурой. Поддерживаются как массивы little-endian, так и big-endian, и файл с little-endian числами даст массив little-endian на любой машине, считывающей файл. Типы описываются в терминах их фактических размеров. Например, если машина с 64-битным C «long int» записывает массив с «long int», машина чтения с 32-битным C «long int» получит массив с 64-битными целыми числами.
  • Легко обращается для анализа. Наборы данных часто живут дольше программ, которые их создали. Компетентный разработчик должен уметь создать решение на предпочитаемом языке программирования для чтения большинства файлов .npy без значительного объёма документации.
  • Позволяет отобразить данные в памяти. См. open_memmap.
  • Может считываться из объекта потокового ввода-вывода вместо фактического файла.
  • Хранит массивы объектов, т. е. массивы, содержащие элементы, являющиеся произвольными объектами Python. Файлы с массивами объектов не должны быть доступны для отображения в памяти, но могут быть читаны и записаны на диск.

Ограничения

  • Произвольные подклассы numpy.ndarray не полностью сохраняются. Подклассы будут приняты для записи, но будут записаны только данные массива. При чтении файла будет создан обычный объект numpy.ndarray.

Предупреждение

Из-за ограничений в интерпретации структурированных типов данных типы данных с полями с пустыми именами будут иметь имена, заменённые на «f0», «f1» и т. д. Такие массивы не будут точно передаваться через формат. Данные остаются целостными; изменятся только имена полей. Мы работаем над исправлением этой ошибки. Это исправление не потребует изменения формата файла. Массивы с такими структурами по-прежнему могут быть сохранены и восстановлены, и правильный тип данных может быть восстановлен с помощью метода loadedarray.view(correct_dtype).

Расширения файлов

Мы рекомендуем использовать расширения .npy и .npz для файлов, сохранённых в этом формате. Это никоим образом не обязательно; приложения могут использовать эти форматы файлов, но использовать расширение, специфичное для приложения. Однако, в отсутствие очевидной альтернативы, мы рекомендуем использовать .npy и .npz.

Нумерация версий

Нумерация версий этих форматов независима от нумерации версий NumPy. Если формат обновлён, код в numpy.io по-прежнему сможет читать и записывать файлы версии 1.0.

Формат версии 1.0

Первые 6 байтов — это магическая строка: ровно \x93NUMPY.

Следующий 1 байт — это беззнаковое целое число: номер основной версии формата файла, например, \x01.

Следующий 1 байт — это беззнаковое целое число: номер дополнительной версии формата файла, например, \x00. Примечание: версия формата файла не связана с версией пакета numpy.

Следующие 2 байта представляют собой беззнаковое целое число типа short int в формате little-endian: длина заголовка данных HEADER_LEN.

Следующие HEADER_LEN байтов образуют данные заголовка, описывающие формат массива. Это строка ASCII, которая содержит выражение Python литерала словаря. Она завершается новой строкой (\n) и заполняется пробелами (\x20) для того, чтобы общее количество len(magic string) + 2 + len(length) + HEADER_LEN было кратно 64 для выравнивания.

Словарь содержит три ключа:

“descr”dtype.descr

Объект, который может быть передан в качестве аргумента конструктору numpy.dtype для создания типа данных массива.

“fortran_order”bool

Указывает, являются ли данные массива Fortran-непрерывными или нет. Поскольку массивы Fortran-непрерывности являются распространённой формой не-C-непрерывности, мы позволяем им записываться напрямую на диск для повышения эффективности.

“shape”кортеж целых чисел

Форма массива.

Для повторяемости и читаемости ключи словаря упорядочиваются в алфавитном порядке. Это делается только для удобства. Писатель ДОЛЖЕН реализовать это, если это возможно. Читатель НЕ ДОЛЖЕН полагаться на это.

За заголовком следуют данные массива. Если тип данных содержит объекты Python (т. е. dtype.hasobject is True), то данные являются сериализованным представлением (pickle) массива. В противном случае данные представляют собой непрерывный (либо C-, либо Fortran-, в зависимости от fortran_order) байтовый массив. Потребители могут определить количество байтов, умножив количество элементов, заданных формой (обращая внимание, что shape=() означает, что есть 1 элемент), на dtype.itemsize.

Формат версии 2.0

Формат версии 1.0 допускал, что общий размер заголовка массива может быть не более 65535 байт. Это может быть превышено структурированными массивами с большим числом столбцов. Формат версии 2.0 расширяет размер заголовка до 4 ГБ. numpy.save автоматически сохранит данные в формате 2.0, если это необходимо, в противном случае всегда будет использоваться более совместимый формат 1.0.

Описание четвёртого элемента заголовка, следовательно, стало следующим: «Следующие 4 байта образуют беззнаковое целое число типа int в формате little-endian: длина данных заголовка HEADER_LEN.»

Формат версии 3.0

Эта версия заменяет строку ASCII (которая на практике использовала latin1) на строку UTF-8, поэтому поддерживает структурированные типы с именами полей любого юникода.

Примечания

Формат .npy, включая мотивацию для его создания и сравнение альтернатив, описан в “npy-format” NEP, однако детали со временем эволюционировали, и этот документ более современен.

Функции

descr_to_dtype(descr)

Возвращает тип данных на основе данного описания.

dtype_to_descr(dtype)

Получить сериализуемое описание из типа данных.

header_data_from_array_1_0(array)

Получить словарь метаданных заголовка из numpy.ndarray.

isfileobj(f)

magic(major, minor)

Возвращает магическую строку для заданной версии формата файла.

open_memmap(filename[, mode, dtype, shape, ...])

Открыть файл .npy как массив, отображенный в памяти.

read_array(fp[, allow_pickle, ...])

Прочитать массив из файла NPY.

read_array_header_1_0(fp[, max_header_size])

Прочитать заголовок массива из объекта потокового ввода-вывода, используя версию формата файла 1.0.

read_array_header_2_0(fp[, max_header_size])

Прочитать заголовок массива из объекта потокового ввода-вывода, используя версию формата файла 2.0.

read_magic(fp)

Прочитать магическую строку, чтобы получить версию формата файла.

write_array(fp, array[, version, ...])

Записать массив в файл NPY, включая заголовок.

write_array_header_1_0(fp, d)

Записать заголовок массива, используя формат версии 1.0.

write_array_header_2_0(fp, d)

Записать заголовок массива, используя формат версии 2.0.

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.lib.format.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API