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

问题描述 投票:0回答:1

是否有任何有效的方法(numpy 风格)来生成所有 n 选择 k 个二进制向量(有 k 个)? 例如,如果

n=3
k=2
,那么我想生成
(1,1,0), (1,0,1), (0,1,1)

谢谢

python python-3.x numpy
1个回答
5
投票

我不知道这有多有效,但这里有一个方法:

from itertools import combinations
import numpy as np

def n_choose_k_vectors(n: int, k: int):
    return np.array(
        [
            [int(i in comb) for i in range(n)]
            for comb in combinations(np.arange(n), k)
        ]
    )

n_choose_k_vectors(n=5, k=3)
>>>
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.]])
© www.soinside.com 2019 - 2024. All rights reserved.