Входные и выходные числовые массивы в h5py

У меня есть код Python, выход которого представляет собой введите описание изображения здесь матрицу размера, все записи которой являются тип float. Если я сохраню его с расширением .dat, размер файла будет порядка 500 МБ. Я прочитал, что использование h5py значительно уменьшает размер файла. Итак, допустим, у меня есть двумерный массив с именем A. Как мне сохранить его в файл h5py? Кроме того, как мне прочитать тот же файл и поместить его в виде массива в другом коде, как мне нужно сделать манипуляции с массивом?

65 голосов | спросил lovespeed 5 Jam1000000amSun, 05 Jan 2014 03:41:12 +040014 2014, 03:41:12

2 ответа


0

h5py предоставляет модель наборов данных и групп . Первый - это в основном массивы, а второй - каталоги. Каждый назван. Вы должны посмотреть документацию по API и примеры:

http://docs.h5py.org/en/latest/quick.html

Простой пример, когда вы создаете все данные заранее и просто хотите сохранить их в файл hdf5, будет выглядеть примерно так:

In [1]: import numpy as np
In [2]: import h5py
In [3]: a = np.random.random(size=(100,20))
In [4]: h5f = h5py.File('data.h5', 'w')
In [5]: h5f.create_dataset('dataset_1', data=a)
Out[5]: <HDF5 dataset "dataset_1": shape (100, 20), type "<f8">

In [6]: h5f.close()

Затем вы можете загрузить эти данные обратно, используя:

In [10]: h5f = h5py.File('data.h5','r')
In [11]: b = h5f['dataset_1'][:]
In [12]: h5f.close()

In [13]: np.allclose(a,b)
Out[13]: True

Обязательно ознакомьтесь с документами:

http://docs.h5py.org

Запись в файл hdf5 зависит от h5py или pytables (у каждого из них есть свой API-интерфейс python, который находится в верхней части спецификации файла hdf5). Вам также следует взглянуть на другие простые двоичные форматы, изначально предоставленные numpy, такие как np.save, np.savez и т. Д.

http://docs.scipy.org/doc/numpy/reference/routines.io .html

ответил JoshAdel 6 Jam1000000amMon, 06 Jan 2014 00:27:49 +040014 2014, 00:27:49
0

Более чистый способ управлять открытием /закрытием файла и избежать утечек памяти:

Подготовка:

import numpy as np
import h5py

data_to_write = np.random.random(size=(100,20)) # or some such

Запись:

with h5py.File('name-of-file.h5', 'w') as hf:
    hf.create_dataset("name-of-dataset",  data=data_to_write)

Читать:

with h5py.File('name-of-file.h5', 'r') as hf:
    data = hf['name-of-dataset'][:]
ответил Lavi Avigdor 26 Jpm1000000pmThu, 26 Jan 2017 23:47:26 +030017 2017, 23:47:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132