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

MRm*_*MRm 3 python numpy python-3.x

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

谢谢

noc*_*mbi 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.]])
Run Code Online (Sandbox Code Playgroud)