gpt4 book ai didi

python - Python 中数据类型之间的内存使用情况

转载 作者:行者123 更新时间:2023-12-02 20:44:36 26 4
gpt4 key购买 nike

我试图弄清楚为什么 int8 比 float 数据类型使用更多的内存。不应该更少吗,因为它应该只使用 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

关于python - Python 中数据类型之间的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44914651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com