gpt4 book ai didi

python - 为什么 sys.getsizeof(numpy.int8(1)) 返回 12?

转载 作者:太空狗 更新时间:2023-10-30 01:16:51 25 4
gpt4 key购买 nike

我想创建一个小的 NumPy 整数来节省内存。但是,我注意到

import numpy,sys
print sys.getsizeof(numpy.int8(1))

打印 12,因此 numpy.int8() 似乎生成了 12 个字节而不是 1 个字节的数据。这是为什么?

最佳答案

Numpy 标量具有与 CPython 数据类型类似的实现,例如 python float 或整数类型。换句话说,它是一个包含三个变量的结构:

在 32 位架构中,引用计数器和指针通常各为 4 个字节。原则上值字段可以是任意大小,但是 structure padding将导致结构分配 4 个字节,即使值需要更少。

如果您使用的是 64 位架构,请将“4 字节”替换为“8 字节”。

因此,32 位系统上的所有 numpy 整数(实际上)由三个 4 字节变量组成,sys.getsizeof(numpy.int8(1)) 给出 12。在 64 位上-位系统,它将返回 24。

大多数 numpy 标量的大小相同。一个异常(exception)是 numpy.complex 类型,它通常需要双重存储。由于这在内存中与其他两个变量对齐,您可以忽略填充并简单地将分配给该值的字节加倍,分别在 32 位和 64 位中提供 16 和 32 字节。类似的规则适用于更奇特的类型(complex256float80 等)

关于python - 为什么 sys.getsizeof(numpy.int8(1)) 返回 12?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369553/

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