【发布时间】: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