【发布时间】:2017-11-20 11:57:16
【问题描述】:
我正在尝试创建一个大型布尔数组(用于素数筛)。我使用了第一个 Python 列表,但在 limit = 10^9 这创建了一个 MemoryError。
boolarray = [True] * limit
然后我了解了 Numpy 并读到它在空间组织方面更好,所以我尝试了
boolarray = np.full(limit, True, dtype = bool)
限制只是略微增加到10^10,这还不够,因为我需要10^12。我觉得这很令人惊讶,你只需要一点布尔值,不是吗?任何想法,如何克服这个问题?提前致谢。
【问题讨论】:
-
Docs:
bool_ Boolean (True or False) stored as a byte。现在我让其他人/你对这个设计决策进行一些研究。它与 CPU 架构和预期用例高度相关。 -
好吧,我可能犯了一个错误,所以您需要验证一下:)(我将这个数字计算为
10**12 / (8 * 1024**3))。除非你有大量的 ram,否则你可能应该寻找不同的方法。 -
@Piinthesky 你可能会觉得this answer 很有趣。它讨论了有效存储素数的方法。但是,我不确定这是否有助于首先生成它们...
-
优秀。这也是我一直在思考的事情。以防万一其他人对编程不太感兴趣,只想有一个实用的解决方案 - 有像 primesieve.org 这样的 C 库。
-
primesieve 库也有Python bindings。
标签: python python-3.x numpy boolean