numpy 获取bool数组的所有排列

t0ybt7op  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(107)

我需要bool数组的所有排列,下面的代码效率很低,但能完成我想要的工作:

from itertools import permutations
import numpy as np
n1=2
n2=3

a = np.array([True]*n1+[False]*n2)

perms = set(permutations(a))

然而,它的效率很低,而且对于长数组来说是失败的。有没有更有效的实现?

kknvjkwl

kknvjkwl1#

如何对真值的指数组合进行采样:

from itertools import combinations
import numpy as np

a = np.arange(n1+n2)

out = [np.isin(a, x).tolist() for x in combinations(range(n1+n2), r=n1)]

输出量:

[[True, True, False, False, False],
 [True, False, True, False, False],
 [True, False, False, True, False],
 [True, False, False, False, True],
 [False, True, True, False, False],
 [False, True, False, True, False],
 [False, True, False, False, True],
 [False, False, True, True, False],
 [False, False, True, False, True],
 [False, False, False, True, True]]

相关问题