Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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中数据类型之间的内存占用_Python_Python 3.x_Numpy - Fatal编程技术网

Python中数据类型之间的内存占用

Python中数据类型之间的内存占用,python,python-3.x,numpy,Python,Python 3.x,Numpy,我试图弄明白为什么int8比浮点数据类型使用更多的内存。它不应该更少,因为它应该只使用1字节的内存 import numpy as np import sys In [32]: sys.getsizeof(np.int8(29.200)) Out[32]: 25 In [33]: sys.getsizeof(np.int16(29.200)) Out[33]: 26 In [34]: sys.getsizeof(np.int32(29.200)) Out[34]: 28 In [35]:

我试图弄明白为什么int8比浮点数据类型使用更多的内存。它不应该更少,因为它应该只使用1字节的内存

import numpy as np
import sys

In [32]: sys.getsizeof(np.int8(29.200))
Out[32]: 25

In [33]: sys.getsizeof(np.int16(29.200))
Out[33]: 26

In [34]: sys.getsizeof(np.int32(29.200))
Out[34]: 28

In [35]: sys.getsizeof(np.float(29.200))
Out[35]: 24

In [36]: sys.getsizeof(np.float32(29.200))
Out[36]: 28

In [37]: sys.getsizeof(np.float64(29.200))
Out[37]: 32

像这样在孤立的
np.types
上使用
getsizeof
,信息量不大

np.int8(…)
是一个对象,它不仅包括数据字节,还包括各种numpy属性。它类似于np.array(123,dtype=int8)。换句话说,阵列开销大于数据存储本身

查看
np.ones((1000,),dtype=np.int8)
等的大小更有用。
getsize
将显示1000个数据字节,外加一个数组“开销”

In [31]: sys.getsizeof(np.int8(123))
Out[31]: 13
In [32]: sys.getsizeof(np.int16(123))   # 1 more byte
Out[32]: 14
In [33]: sys.getsizeof(np.int32(123))   # 2 more bytes
Out[33]: 16
In [34]: sys.getsizeof(np.int64(123))   # 4 more bytes
Out[34]: 24
In [35]: sys.getsizeof(123)
Out[35]: 14
对于这些阵列,有48字节的开销,然后是1000个元素:

In [36]: sys.getsizeof(np.ones(1000, np.int8))  # 1 byte each
Out[36]: 1048
In [37]: sys.getsizeof(np.ones(1000, np.int16))  # 2 bytes each
Out[37]: 2048

In [38]: np.ones(1000, np.int8).itemsize  # np.int8(123).itemsize
Out[38]: 1
In [39]: np.ones(1000, np.int16).itemsize
Out[39]: 2

像这样在孤立的
np.types
上使用
getsizeof
,信息量不大

np.int8(…)
是一个对象,它不仅包括数据字节,还包括各种numpy属性。它类似于np.array(123,dtype=int8)。换句话说,阵列开销大于数据存储本身

查看
np.ones((1000,),dtype=np.int8)
等的大小更有用。
getsize
将显示1000个数据字节,外加一个数组“开销”

In [31]: sys.getsizeof(np.int8(123))
Out[31]: 13
In [32]: sys.getsizeof(np.int16(123))   # 1 more byte
Out[32]: 14
In [33]: sys.getsizeof(np.int32(123))   # 2 more bytes
Out[33]: 16
In [34]: sys.getsizeof(np.int64(123))   # 4 more bytes
Out[34]: 24
In [35]: sys.getsizeof(123)
Out[35]: 14
对于这些阵列,有48字节的开销,然后是1000个元素:

In [36]: sys.getsizeof(np.ones(1000, np.int8))  # 1 byte each
Out[36]: 1048
In [37]: sys.getsizeof(np.ones(1000, np.int16))  # 2 bytes each
Out[37]: 2048

In [38]: np.ones(1000, np.int8).itemsize  # np.int8(123).itemsize
Out[38]: 1
In [39]: np.ones(1000, np.int16).itemsize
Out[39]: 2