python - 如果发生内存错误,如何解决在 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))
~\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
:)
推荐阅读
- ssh - 为什么“ssh root@server”需要 id_dsa 密钥?
- r - 使用 ggplot 在雷达图中错误绘制 NA 数据
- java - 想要编写代码而不抛出异常
- php - 如何使用 wordpress 转义功能回显 Google Adsense 代码?
- android - 类 'org.apache.commons.logging.impl.LogFactoryImpl' 不能转换为 'org.apache.commons.logging.b'
- typescript - 如何处理打字稿中可能未定义的?
- opencv - 使用 dlib 和 opencv 的应用程序的 yocto 配方
- artifactory - Artifactory 查询语言:查找构建的依赖项
- amazon-s3 - AWS S3 CopyObject 保持缓存控制?
- c# - 将项目添加到 IEnumerable
创建新的类对象时