与 uint8 相比,以二进制形式保存 numpy 数组不会提高磁盘使用率

Saving a numpy array in binary does not improve disk usage compared to uint8

我正在保存 numpy 数组,同时尝试使用尽可能少的磁盘 space。 在此过程中,我意识到与 uint8 数组相比,保存布尔型 numpy 数组不会提高磁盘使用率。 这是有原因的还是我做错了什么?

这是一个最小的例子:

import sys
import numpy as np

rand_array = np.random.randint(0, 2, size=(100, 100), dtype=np.uint8)  # create a random dual state numpy array

array_uint8 = rand_array * 255  # array, type uint8

array_bool = np.array(rand_array, dtype=bool)  # array, type bool

print(f"size array uint8 {sys.getsizeof(array_uint8)}")
# ==> size array uint8 10120
print(f"size array bool {sys.getsizeof(array_bool)}")
# ==> size array bool 10120

np.save("array_uint8", array_uint8, allow_pickle=False, fix_imports=False)
# size in fs: 10128
np.save("array_bool", array_bool, allow_pickle=False, fix_imports=False)
# size in fs: 10128

uint8bool 数据类型每个元素占用一个字节的内存,因此相同维度的数组总是会占用相同的内存。如果您的目标是减少内存占用,您可以使用 numpy.packbits 将布尔值作为位打包到一个 uint8 数组中,从而将二进制数据存储在一个小得多的数组中 (read here)