
Файлы с расширением .npy представляют собой бинарный формат, используемый библиотекой NumPy для хранения многомерных массивов. Внутри них сохраняется структура данных, тип элементов и форма массива, что позволяет восстанавливать объект без потерь и дополнительных преобразований.
Основной инструмент для работы с форматом – функция numpy.load(). Она открывает файл и возвращает массив в том же виде, в каком он был сохранён. При необходимости можно управлять параметрами загрузки: указать чтение в режиме memory-mapped, чтобы работать с крупными массивами без полной загрузки в оперативную память, или включить проверку безопасности с помощью аргумента allow_pickle=False, если в файле могут быть сохранены объекты Python.
Для анализа содержимого файла перед загрузкой полезно знать его предполагаемую структуру: например, массив изображений в формате (количество, высота, ширина, каналы) или таблица признаков в виде (строки, столбцы). Чёткое понимание ожидаемой формы данных позволяет сразу корректно использовать результат загрузки и избежать ошибок при последующей обработке.
Установка и импорт библиотеки NumPy
Для работы с файлами формата .npy необходима библиотека NumPy. Установка выполняется через пакетный менеджер:
pip install numpy
Если используется Anaconda, удобнее выполнить:
conda install numpy
Проверить успешность установки можно вызовом:
python -c "import numpy; print(numpy.__version__)"
Импорт в код выполняется по общепринятому сокращению:
import numpy as np
Такой вариант обеспечивает доступ к функциям и методам библиотеки с минимальным количеством символов, что критично при частом обращении к методам массива и операциям с файлами .npy.
Чтение массива с помощью numpy.load()
Функция numpy.load() открывает файлы формата .npy и возвращает массив NumPy. Базовое использование:
import numpy as np
data = np.load("dataset.npy")
print(data.shape)
print(data.dtype)
Ключевые параметры:
| Параметр | Назначение | Пример |
|---|---|---|
allow_pickle |
Разрешает загрузку объектов Python, сохранённых через pickle. Опасно при работе с непроверенными файлами. | np.load("file.npy", allow_pickle=True) |
mmap_mode |
Загружает массив не полностью в память, а через memory mapping. Полезно для больших данных. | np.load("big.npy", mmap_mode="r") |
encoding |
Используется при чтении объектов Python 2 в Python 3. | np.load("old.npy", allow_pickle=True, encoding="latin1") |
После загрузки рекомендуется сразу проверить shape и dtype, чтобы убедиться в соответствии формата ожидаемым данным.
Загрузка файла с несколькими массивами

Пример сохранения и загрузки с явными именами:
import numpy as np
imgs = np.random.rand(1000, 224, 224, 3).astype('float32')
lbls = np.arange(1000, dtype='int32')
np.savez_compressed('dataset.npz', images=imgs, labels=lbls)
with np.load('dataset.npz', mmap_mode='r') as data:
print(data.files) # ['images', 'labels']
images = data['images'] # mmap-объект, не загружает всё в память
labels = data['labels']
Если массивы большие (>1–2 ГБ), используйте mmap_mode='r' при загрузке – доступ по mmap снизит потребление RAM и ускорит частичную выборку. Проверяйте array.shape и array.dtype до вычислений; при необходимости приводите к компактным типам (float32, int32).
Работа с ключами: объект, возвращаемый np.load для .npz, ведёт себя как словарь. Для итерации и последовательной обработки используйте for name in data.files: или for name, arr in data.items():. Закрывайте объект (или используйте with), чтобы освободить дескрипторы.
Если файл содержит сериализованные Python-объекты, загрузка потребует allow_pickle=True. Включайте его только когда уверены в источнике файла, иначе возможны риски выполнения вредоносного кода. Для метаданных безопаснее хранить отдельный .json-файл рядом с .npz.
Рекомендации по размеру и скорости: np.savez_compressed экономит место, но замедляет запись/чтение; для рабочей тренировки моделей используйте несжатый .npz для скорости и сжатый – для архивирования. Для потоковой загрузки батчей читаете с mmap и копируете только нужные срезы в оперативную память.
Проверки после загрузки: подтверждайте ожидаемые размеры и оси (например, assert images.ndim == 4), при несоответствии – исправляйте порядок осей явно (np.transpose) или пересохраняйте с корректным форматом. Для совместимости между версиями NumPy сохраняйте примитивные типы и избегайте объектов Python внутри массивов.
Определение типа данных и формы массива
После загрузки файла формата npy с помощью numpy.load() важно проверить характеристики массива. Для этого используйте атрибуты .dtype и .shape.
dtype указывает точный тип элементов: например, float32, int64 или bool. Это помогает понять требования к памяти и выбрать подходящие операции. Несовпадение ожидаемого типа может вызвать ошибки при обработке данных, поэтому стоит явно контролировать его.
shape показывает структуру массива в виде кортежа размеров по каждому измерению. Например, (1000, 128) означает тысячу строк и 128 столбцов. Знание формы необходимо для корректного применения методов линейной алгебры, преобразований размерности и обучения моделей.
Для комплексного анализа можно использовать array.ndim, чтобы определить количество измерений, и array.size для получения общего числа элементов. Эти параметры позволяют оценить масштаб данных до выполнения вычислительных операций.
Обработка ошибок при открытии файла npy
При работе с файлами формата .npy ошибки могут возникать из-за отсутствия файла, повреждения данных или несовместимости версий NumPy. Для корректной обработки ошибок используйте конструкцию try-except.
Основные типы исключений при загрузке .npy:
FileNotFoundError– файл не найден по указанному пути.OSError– файл существует, но поврежден или недоступен для чтения.ValueError– несовпадение формата файла и ожиданий NumPy, например при загрузке устаревшего формата.
Рекомендуемый шаблон обработки ошибок:
import numpy as np
file_path = "data.npy"
try:
data = np.load(file_path)
except FileNotFoundError:
print(f"Файл {file_path} не найден. Проверьте путь.")
except OSError:
print(f"Файл {file_path} поврежден или недоступен.")
except ValueError:
print(f"Файл {file_path} имеет неверный формат для np.load.")
Дополнительно можно использовать аргумент allow_pickle=True, если файл содержит объекты Python:
data = np.load(file_path, allow_pickle=True)
Практические рекомендации:
- Перед загрузкой проверяйте существование файла через
os.path.exists(file_path). - Используйте
with open(file_path, 'rb')для контроля над дескриптором файла. - Для больших файлов применяйте
mmap_mode='r'для уменьшения потребления памяти. - Логируйте ошибки с указанием имени файла и типа исключения для последующего анализа.
Соблюдение этих практик минимизирует неожиданные сбои при работе с .npy и повышает надежность обработки данных.
Чтение больших файлов npy с параметром mmap_mode
Для работы с файлами .npy, размер которых превышает доступную оперативную память, используется параметр mmap_mode функции numpy.load. Он позволяет подключить массив как память, отображённую на файл, без полной загрузки данных в RAM.
Пример использования: arr = np.load('data.npy', mmap_mode='r'). Здесь 'r' открывает файл только для чтения. Альтернативные режимы: 'r+' для чтения и записи, 'w+' для создания нового файла с чтением и записью.
Массив, созданный через mmap, поддерживает доступ к срезам без выделения памяти под весь массив. Например, arr[1000:2000] загрузит только указанный диапазон строк или элементов.
При обработке больших данных рекомендуется разбивать вычисления на блоки. Это предотвращает переполнение памяти и ускоряет операции за счёт последовательного чтения с диска.
Важно учитывать, что операции, изменяющие данные на месте, в режиме 'r+' могут перезаписать исходный файл. Для безопасного редактирования лучше создавать копию массива: arr_copy = arr[:].
Использование mmap_mode эффективно при анализе массивов размером от нескольких гигабайт до десятков гигабайт, где стандартная загрузка через np.load невозможна или неэффективна.
Преобразование данных из npy в другие форматы

Файлы формата .npy содержат массивы NumPy, которые можно конвертировать в CSV, JSON, Excel или HDF5 для совместимости с другими инструментами. Основной подход – загрузка массива через numpy.load() и последующая запись с использованием специализированных библиотек.
Для сохранения в CSV используется numpy.savetxt('file.csv', array, delimiter=','). Для многомерных массивов лучше сначала изменить форму массива с помощью array.reshape(-1, array.shape[-1]), чтобы каждая строка соответствовала одной записи.
Экспорт в JSON возможен через import json и json.dump(array.tolist(), open('file.json', 'w')). Преобразование в список методом tolist() необходимо, так как JSON не поддерживает массивы NumPy напрямую.
Для Excel используется pandas.DataFrame(array).to_excel('file.xlsx', index=False). Метод удобен для массивов до нескольких миллионов элементов и позволяет сохранять многомерные данные в таблицах с настраиваемыми именами столбцов.
Формат HDF5 подходит для больших массивов. Создание файла выполняется через import h5py и h5py.File('file.h5', 'w')['dataset'] = array. HDF5 обеспечивает эффективное чтение и запись сегментов данных без загрузки всего массива в память.
При конвертации важно учитывать тип данных. Например, float64 сохраняется корректно во все перечисленные форматы, но complex требует разложения на реальные и мнимые части перед сохранением в CSV или Excel.
Автоматизацию преобразования можно реализовать через функцию, которая по расширению целевого файла выбирает подходящий метод: CSV через numpy.savetxt, JSON через json.dump, Excel через pandas и HDF5 через h5py. Это упрощает обработку больших наборов .npy файлов без ручного контроля каждого формата.
Вопрос-ответ:
Что такое файл .npy и чем он отличается от обычного текстового файла?
Файл с расширением .npy — это специальный формат, используемый библиотекой NumPy для хранения массивов данных. В отличие от текстовых файлов, .npy сохраняет массив в бинарном виде, что позволяет сохранять точные значения, размерность и тип данных. Такой подход делает загрузку и сохранение больших массивов быстрым и безопасным с точки зрения точности данных.
Как открыть файл .npy в Python с помощью NumPy?
Для открытия .npy файла используется функция numpy.load(). Сначала нужно импортировать библиотеку NumPy: import numpy as np, затем загрузить файл: arr = np.load('имя_файла.npy'). После этого массив будет доступен в переменной arr для дальнейшей работы, например, для вычислений или визуализации.
Можно ли открыть .npy файл без использования NumPy?
Файлы .npy имеют специфическую структуру, поэтому стандартные методы работы с текстовыми или бинарными файлами не подходят. Теоретически можно написать собственный парсер, учитывая заголовок и бинарное представление массива, но на практике это неудобно и подвержено ошибкам. NumPy предоставляет безопасный и проверенный способ чтения таких файлов, поэтому использование этой библиотеки является самым простым вариантом.
Что делать, если при загрузке .npy файла возникает ошибка «EOFError»?
Ошибка «EOFError» обычно означает, что файл поврежден или обрезан, то есть его содержимое неполное. Возможные причины: некорректная передача файла, преждевременное завершение записи, проблемы с диском. Проверить целостность файла можно, открыв его на другом устройстве или перезаписав исходный массив с помощью np.save(). Также стоит убедиться, что используемая версия NumPy совместима с форматом файла.
Можно ли загружать несколько массивов из одного .npy файла?
Файл .npy обычно хранит один массив. Если нужно сохранить несколько массивов в одном файле, используется формат .npz, который является архивом нескольких .npy файлов. Для открытия .npz применяется та же функция numpy.load(), но результатом будет объект типа NpzFile, который позволяет обращаться к отдельным массивам по имени: data = np.load('имя_файла.npz'); arr1 = data['массив1'].
