【问题标题】:How much memory does my list use? [duplicate]我的列表使用了多少内存? [复制]
【发布时间】:2016-06-30 00:13:34
【问题描述】:

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

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

其中“a”最多可以包含 1 亿个整数。如何准确查询此列表占用了多少内存(以 MB/GB 为单位)?

【问题讨论】:

  • 我手边没有hdf5...a是什么类型的?
  • with子句前后添加一对提示,并使用普通系统工具检查进程内存使用情况。
  • 在标题中使用list 具有误导性。这是array

标签: python numpy memory h5py


【解决方案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,但可以通过shape和dtype计算出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2017-01-30
    • 2013-07-31
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2012-07-08
    相关资源
    最近更新 更多