我试图弄清楚为什么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
答案 0 :(得分:3)
在这样的孤立getsizeof
上使用np.types
并不是非常有用。
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