尝试生成2exp(40)矩阵时出现内存问题

问题描述 投票:0回答:1

我正在尝试生成N = 40的所有可能的二进制数,因此我使用了以下代码:

l = list(itertools.product([0, 1], repeat=40))

但是我遇到了一个内存问题,该进程被终止,并且我使用的是功能强大的计算机,具有64GB RAM,因此有解决此问题的方法吗?

python optimization binary genetic-algorithm
1个回答
0
投票

您正在尝试生成2 ^ 40(即超过1万亿个)列表,每个列表包含40个整数元素。即使使用最基本的假设(不计算列表开销等),也需要960 TB的RAM。

解决方案是not,尝试将生成器转换为列表并直接使用生成器:

>>> l = itertools.product([0, 1], repeat=40)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0)
...
© www.soinside.com 2019 - 2024. All rights reserved.