Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3 numpy数组大小与列表比较_Python 3.x_Numpy - Fatal编程技术网

Python 3.x Python3 numpy数组大小与列表比较

Python 3.x Python3 numpy数组大小与列表比较,python-3.x,numpy,Python 3.x,Numpy,我一直认为numpy数组比list更紧凑,占用的内存更少,但是,对于三维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.t

我一直认为numpy数组比list更紧凑,占用的内存更少,但是,对于三维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(一个3-D数组)


谢谢大家!

显示每个
列表
元素消耗8个字节

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

此外,当您从三维阵列开始时, 您将看到列表中的列表。 您可以自己递归数据结构 准确地将分配的字节相加。
或者您可以使用。

getsizeof
是非递归的,即它不会考虑容器的内容。请参阅ndarray`is easy-
arr.nbytes
的内存使用,或每个元素的形状和字节的乘积。列表的内存使用很难估计。
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