gpt4 book ai didi

python - 为什么 dtype=object 的 numpy 数组产生的文件大小比 dtype=int 小得多?

转载 作者:太空狗 更新时间:2023-10-30 00:43:19 24 4
gpt4 key购买 nike

举个例子:

import numpy as np
randoms = np.random.randint(0, 20, 10000000)

a = randoms.astype(np.int)
b = randoms.astype(np.object)

np.save('d:/dtype=int.npy', a) #39 mb
np.save('d:/dtype=object.npy', b) #19 mb!

你可以看到 dtype=object 的文件大约有一半大小。怎么来的?我的印象是正确定义的 numpy dtypes 严格来说比 object dtypes 好。

最佳答案

对于非对象数据类型,大多数 npy 文件格式都包含数组数据原始字节的转储。此处每个元素为 4 或 8 个字节,具体取决于您的 NumPy 默认为 4 字节还是 8 字节整数。从文件大小来看,它看起来像每个元素 4 个字节。

对于对象数据类型,大多数 npy 文件格式由数组的普通 pickle 组成。对于小整数,例如数组中的整数,pickle 使用 K pickle 操作码,长名称 BININT1,在 pickletools 中“记录”模块:

I(name='BININT1',
code='K',
arg=uint1,
stack_before=[],
stack_after=[pyint],
proto=1,
doc="""Push a one-byte unsigned integer.

This is a space optimization for pickling very small non-negative ints,
in range(256).
"""),

每个整数需要两个字节,一个用于K 操作码,一个字节用于无符号整数数据。

请注意,您可以通过使用 dtype numpy.int8numpy.uint8 存储数组来进一步减小文件大小,每个整数大约 1 个字节。

关于python - 为什么 dtype=object 的 numpy 数组产生的文件大小比 dtype=int 小得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473476/

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