我的列表使用了多少内存?

时间:2016-03-14 19:26:54

标签: python numpy memory h5py

我通过以下方式将hdf5数据集读入内存:

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

其中' a'最多可以有1亿人参加。如何确切地查询此列表占用的MB / GB内存量?

1 个答案:

答案 0 :(得分: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具有shape,size和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

y1ndarray,其中包含我描述的所有属性。 y,已卸载,没有nbytes,但可以从shape和dtype计算。