gpt4 book ai didi

python - numpy boolean 数组中的内存溢出

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:50 26 4
gpt4 key购买 nike

我正在尝试创建一个大型 boolean 数组(用于素数筛)。我使用了第一个 Python 列表,但是在 limit = 10^9 这会创建一个 MemoryError

boolarray = [True] * limit

然后我了解了 Numpy 并阅读到空间组织更好,所以我尝试了

boolarray = np.full(limit, True, dtype = bool)

限制仅略微增加到 10^10,这还不够,因为我需要 10^12。我觉得这很奇怪,你只需要一点 boolean 值,不是吗?任何想法,如何克服这个问题?提前致谢。

最佳答案

让我们撇开 10^12 位可能不容易装入内存这一事实。如果您更关心内存使用而不是性能,您可以将这些位打包到一个字节数组中。这是以读取/写入位时的额外计算为代价的(这就是 numpy 将 boolean 值存储为字节的原因)。

import numpy as np


def getbit(bitarray, index):
i, j = index // 8, index % 8
x = bitarray[i]
return x & (1 << j) != 0


def setbit(bitarray, index, value):
value = bool(value)
i, j = index // 8, index % 8
x = bitarray[i]
bitarray[i] ^= (np.uint(-value) ^ x) & (1 << j)


n = 10**5 // 8
bitarray = np.zeros(n, dtype=np.uint8) # initialize all bits to 0

print(getbit(bitarray, 19)) # False

setbit(bitarray, 19, True)
print(getbit(bitarray, 19)) # True

setbit(bitarray, 19, False)
print(getbit(bitarray, 19)) # False

关于python - numpy boolean 数组中的内存溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47391487/

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