Из списка элементов вы можете создавать все возможные их комбинации, где их порядок не имеет значения, не тратя время на повторные комбинации:
from itertools import combinations_with_replacement
import numpy as np
n = 3
elements_to_combine = [0, 1]
for c in combinations_with_replacement(elements_to_combine, n):
x = np.array(list(c))
print(x)
и вывод:
[0, 0, 0]
[0, 0, 1]
[0, 1, 1]
[1, 1, 1]
Теперь у вас есть метод прямого шага для вычисления только тех комбинаций, которые вам нужны. Вы также можете добавить элементы в список "elements_to_combine", а также можете увеличить размер n в соответствии с вашими потребностями. Поскольку вы точно не указали тип используемых элементов и то, как вы собираетесь маскировать свои элементы с помощью логических операций И, я оставлю все остальное вам. Надеюсь, что это решит ваши проблемы с производительностью.
Ура!