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