Python 如何根据条件生成2**40个可能的二进制数

Python 如何根据条件生成2**40个可能的二进制数,python,Python,我想生成所有可能的2**N二进制数,条件是每个数组必须有20个这样的一(1):0000000000 1111111111111110000000000,我找到了生成这样一个二进制矩阵的方法: import itertools l = itertools.product([0, 1], repeat=N) 我试着用Numpy生成它,但是我得到了内存错误 那么还有其他方法吗?预期的问题规模是不可行的,但这里有一个基于itetools的生成器,包含所有n位数字和k位数字: import iterto

我想生成所有可能的2**N二进制数,条件是每个数组必须有20个这样的一(1):
0000000000 1111111111111110000000000
,我找到了生成这样一个二进制矩阵的方法:

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'))

2**40是一个很大的数字。。。不管怎样,你说20个是什么意思?
2**40
~10**12
。1GB是
~10**9
字节。你有多少内存?生成的矩阵中的每个数组都必须有20 x 1,就像这个向量一样。例如:
0000000000 1111111111110000000000
如果1必须是连续的,那么在整个候选集上进行迭代是过分的。只有20个,我不知道;你还没有解释你到底想要什么。不可以,不能同时将所有值存储在内存中。不,您甚至不能在任何合理的时间内迭代所有值。为什么您首先想要/需要这些值?
00011
00101
01001
10001
00110
01010
10010
01100
10100
11000