有没有一种高效的方法(类似于numpy风格)来生成所有 n 中选 k 个的二进制向量(其中有 k 个1)?例如,如果 n=3
且 k=2
,那么我想生成 (1,1,0), (1,0,1), (0,1,1)
。
谢谢
有没有一种高效的方法(类似于numpy风格)来生成所有 n 中选 k 个的二进制向量(其中有 k 个1)?例如,如果 n=3
且 k=2
,那么我想生成 (1,1,0), (1,0,1), (0,1,1)
。
谢谢
我不知道这种方法的效率如何,但以下是一种方式:
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.]])