如果发生内存错误,如何解决在 Python 中获得 n 个二进制值的大组合?
How can I solve to get a large combination of n binary values in Python if memory error occurs?
我正在尝试 运行 获取 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))
~\anaconda3\lib\site-packages\pandas\core\frame.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
会很长 :)
我正在尝试 运行 获取 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))
~\anaconda3\lib\site-packages\pandas\core\frame.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
会很长 :)