我试图运行得到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
会很长:)