Сохранить список массивов на диске - PullRequest
0 голосов
/ 16 мая 2018

У меня есть список 42000 numpy массивов (каждый массив 240x240), которые я хочу сохранить в файл для использования в другом скрипте Python.

Я пытался использовать pickle и numpy.savez_compressed, и я сталкиваюсь с ошибками памяти (у меня 16 ГБ DDR3). Я читал, что hdf5, который обычно используется для углубленного изучения, не может сохранять списки, поэтому я застрял.

Кто-нибудь знает, как я могу сохранить свои данные?

РЕДАКТИРОВАТЬ: Ранее я сохранял эти данные в массивном массиве на диск, используя np.save, и это было около 2,3 ГБ, но мой компьютер не всегда мог справиться с этим, так что иногда он зависал, если пытался их обработать. Я читаю списки, может быть, лучше, поэтому я перешел к использованию списков пустых массивов

1 Ответ

0 голосов
/ 16 мая 2018

Предположим, у нас есть список numpy массивов A, и мы хотим сохранить их последовательно в файл HDF5.

Мы можем использовать библиотеку h5py для создания наборов данных с каждым набором данныхсоответствующий массиву в A.

import h5py, numpy as np

A = [arr1, arr2, arr3]  # each arrX is a numpy array

with h5py.File('file.h5', 'w', libver='latest') as f:  # use 'latest' for performance

    for idx, arr in enumerate(A):
        dset = f.create_dataset(str(idx), shape=(240, 240), data=arr, chunks=(240, 240)
                                compression='gzip', compression_opts=9)

Я использую gzip сжатие здесь по соображениям совместимости, поскольку оно поставляется с каждой установкой HDF5.Вы также можете рассмотреть фильтры blosc & lzf.Я также установил chunks равным shape, исходя из предположения, что вы намерены читать целые массивы, а не частичные.

Документация h5py является отличным ресурсом для улучшения вашего пониманияформат HDF5, так как h5py API близко следует за API C.

...