是否有任何有效的方法(numpy 风格)来生成所有 n 选择 k 个二进制向量(有 k 个)? 例如,如果
n=3
和 k=2
,那么我想生成 (1,1,0), (1,0,1), (0,1,1)
。
谢谢
我不知道这有多有效,但这里有一个方法:
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.]])