2016-03-14 4 views
0

Я читаю в hdf5 наборах данных в память через:Сколько памяти использует мой список?

import h5py 
with h5py.File('file.hdf5') as f: 
    a = f['data'][:] 

где «а» может иметь до 100 миллионов заходов. Как я могу точно спросить, сколько памяти в MB/GB занимает этот список?

+0

У меня нет hdf5 под рукой ... какой тип 'a'? – tdelaney

+0

Добавьте пару подсказок до и после предложения 'with' и используйте обычные системные инструменты для проверки использования памяти процесса. – tdelaney

+0

Использование 'list' в заголовке вводит в заблуждение. Это «массив». – hpaulj

ответ

1

h5py загружает (наиболее) значения как numpy массивов. Массив имеет атрибут shape и dtype.

Для массива, который я, случается, есть в моей IPython сессии, я могу получить эти атрибуты:

In [211]: X.shape,X.dtype 
Out[211]: ((51, 13), dtype('float64')) 

In [212]: X.size 
Out[212]: 663 

In [213]: X.size, X.itemsize 
Out[213]: (663, 8) 

In [214]: X.nbytes 
Out[214]: 5304 

Команда IPython whos также дает мне эту информацию:

X ndarray  51x13: 663 elems, type `float64`, 5304 bytes 

X также использует некоторая память для хранения таких атрибутов, но большая часть использования памяти находится в буфере данных, который в этом случае составляет 5304 байта.

h5py мочь добавить некоторую дополнительную информацию; Я должен проверить его документы. Но это основы numpy.

В документах h5py я вижу, что DataSet имеет форму, размер и тип dtype. Я не вижу nbytes или itemsize. Возможно, вам придется это сделать.


Для небольшого файла примера, я получаю (в сеансе IPython)

In [262]: y 
Out[262]: <HDF5 dataset "y": shape (10,), type "<i4"> 
In [265]: y1=f['y'][:] 

И whos записи:

y    Dataset  <HDF5 dataset "y": shape (10,), type "<i4"> 
y1   ndarray  10: 10 elems, type `int32`, 40 bytes 

y1 является ndarray со всеми атрибутами, которые я описал , y, выгружено, не имеет nbytes, но это может быть рассчитано по форме и типу.