生成所有 n 选 k 的二进制向量 python

3

有没有一种高效的方法(类似于numpy风格)来生成所有 n 中选 k 个的二进制向量(其中有 k 个1)?例如,如果 n=3k=2,那么我想生成 (1,1,0), (1,0,1), (0,1,1)

谢谢

1个回答

5

我不知道这种方法的效率如何,但以下是一种方式:

from itertools import combinations
import numpy as np

n, k = 5, 3


np.array(
    [
        [1 if i in comb else 0 for i in range(n)]
        for comb in combinations(np.arange(n), k)
    ]
)
>>>
array([[1., 1., 1., 0., 0.],
       [1., 1., 0., 1., 0.],
       [1., 1., 0., 0., 1.],
       [1., 0., 1., 1., 0.],
       [1., 0., 1., 0., 1.],
       [1., 0., 0., 1., 1.],
       [0., 1., 1., 1., 0.],
       [0., 1., 1., 0., 1.],
       [0., 1., 0., 1., 1.],
       [0., 0., 1., 1., 1.]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接