【问题标题】:Python3 numpy array size compare to listPython3 numpy数组大小与列表比较
【发布时间】:2020-07-26 01:06:21
【问题描述】:

我一直认为 numpy 数组比 list 更紧凑,占用的内存更小,但是对于 3-D float64 np 数组,

print (sys.getsizeof(result2)/1024./1024./1024.)
print (sys.getsizeof(result2.astype('float16'))/1024./1024./1024.)
print (sys.getsizeof(list(result2))/1024./1024./1024.)
print (sys.getsizeof(result2.tolist())/1024./1024./1024.)

输出是,

0.6521792411804199
0.16304489970207214
0.00033977627754211426
0.0003019943833351135

该列表占用的内存要小得多。使用sys.getsizeof 进行列表是否有效?如果是,我可以做些什么来改善 np 数组内存的使用吗?

######################

使用 pympler @J_H,(似乎 pympler 无法处理列表中的数组,例如 list(a 3-D array)。)

print (result2.nbytes/1024./1024./1024.)
print (asizeof.asizeof(result2)/1024./1024./1024.)
print (result2.astype('float16').nbytes/1024./1024./1024.)
print (asizeof.asizeof(list(result2))/1024./1024./1024.)
print (asizeof.asizeof(result2.tolist())/1024./1024./1024.)

0.6521791219711304
0.6521792411804199
0.1630447804927826
0.004566863179206848
4.078836984932423

谢谢大家!

【问题讨论】:

  • getsizeof 是非递归的,即它不会考虑容器的内容。
  • ndarray` 的内存使用很简单 - arr.nbytes,或者每个元素的形状和字节数的乘积。列表的内存使用很难估计。

标签: python-3.x numpy


【解决方案1】:

您表明您的每个 list 元素占用 8 个字节。

但每个元素只是一个指向 24 字节浮点对象的指针。

此外,当您从 3-D 数组开始时, 您将查看列表中的列表。 您可以自己递归数据结构 准确地将分配的字节相加。 或者你可以使用pympler

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多