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

发布于 2025-01-15 00:57:05 字数 772 浏览 0 评论 0原文

我正在保存 numpy 数组,同时尝试使用尽可能少的磁盘空间。 一路上我意识到,与 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

I'm saving numpy arrays while trying to use as little disk space as possible.
Along the way I realized that saving a boolean numpy array does not improve disk usage compared to a uint8 array.
Is there a reason for that or am I doing something wrong here?

Here is a minimal example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囍孤女 2025-01-22 00:57:05

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

The uint8 and bool data types both occupy one byte of memory per element, so the arrays of equal dimensions are always going to occupy the same memory. If you are aiming to reduce your memory footprint, you can pack the boolean values as bits into a uint8 array using numpy.packbits, thereby storing binary data in a significantly smaller array (read here)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文