python - 如何根据条件生成 2**40 个可能的二进制数
问题描述
我想生成所有可能的 2**N 二进制数,条件是每个数组必须有 20 个(1)这样的:00000000001111111111111111111110000000000
,我找到了生成二进制矩阵的方法,如下所示:
import itertools
l = itertools.product([0, 1], repeat=N)
我尝试使用 Numpy 生成它,但出现内存错误。
那么还有其他方法吗?
解决方案
预期的问题规模是不可行的,但这里是一个基于 itetools 的所有 n 位数和 k 个数的生成器:
import itertools
def k_ones(n,k):
"""generates n-bit integers with exactly k ones"""
for c in itertools.combinations(range(n),k):
n = 0
for i in c:
n |= (1 << i)
yield n
#test:
for i in k_ones(5,2):
print(format(i,'05b'))
输出:
00011
00101
01001
10001
00110
01010
10010
01100
10100
11000
推荐阅读
- angular - 根据用户格式偏好动态设置日期选择器的格式
- python-3.x - 无法将 map() 的结果分配给二维列表
- c - strcmp 返回错误值
- hyperledger-fabric - SERVICE_UNAVAILABLE -- 支持的 Kafka 集群尚未完成启动;稍后再试
- reactjs - 在特定路线上隐藏组件 - Reactjs
- java - InvalidProtocolBufferException 试图获取主模块包 ID
- css - 如何修复 CSS“过渡”取消悬停元素?
- amazon-web-services - 使用 --no-verify-ssl 通过 aws cli 将数据复制到 s3。安全与否?
- http - Golang 在服务器运行时得到 404
- javascript - FCM 本站已在后台更新