如果发生内存错误,我如何解决在Python中获得n个二进制值的大组合?



我试图运行得到n个二进制值0和1的所有组合。这是我输入的代码。

import itertools
from itertools import product
import pandas as pd
combinations=pd.DataFrame(product(range(2),repeat=k))

当k的值很小时,此方法有效。但是,我需要得到至少30的所有组合二进制值0和1。例如,我尝试k=31,它导致内存错误,如下所示。

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-5-97fdebdd2a99> in <module>
----> 1 pd.DataFrame(product(range(2),repeat=k))
~anaconda3libsite-packagespandascoreframe.py in __init__(self, data, index, columns, dtype, copy)
467         elif isinstance(data, abc.Iterable) and not isinstance(data, (str, bytes)):
468             if not isinstance(data, (abc.Sequence, ExtensionArray)):
--> 469                 data = list(data)
470             if len(data) > 0:
471                 if is_list_like(data[0]) and getattr(data[0], "ndim", 1) == 1:
MemoryError: 

我已经尝试在128GB RAM和python x64版本的计算机上运行这段代码,但我没有成功获得所需的结果,但只有内存错误。

例如,是否有可能创建两个或更多的数据框架来共同形成我想要的数据框架?尽管如此,我不知道如何解决这个问题,进行单独的计算,得到组合,并在最后将它们组合起来。

或者,是否有其他方法可以在python中成功地获得大组合?

我真的需要你的帮助。

您可以使用类似

的生成器生成所有N位二进制字符串(这似乎是您在这里想要的)
def generate_binary_strings(n):
format_string = f"{{:0{n}b}}"
for x in range(1 << n):
yield format_string.format(x)

for x in generate_binary_strings(4):
print(x)

这个输出

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

我仍然建议不要把它们放在一个列表中,尽管-bits=30会很长:)

最新更新