Я пытаюсь эффективно сгенерировать список всех матриц 9 на 3, где каждая матрица удовлетворяет следующим свойствам:
- Каждая запись равна 0 или 1.
- Каждая строка равна 1.
- Каждый столбец содержит хотя бы один 1.
Мой первый подход был следующим:
Создать список A всех матриц 0-1 размера 9 на 3.
import numpy as np
import itertools
n=9
k=3
A=[np.reshape(np.array(i), (n,k)) for i in itertools.product([0, 1], repeat = n*k)]
Извлечение из списка A тех, чьи суммы строк равны единице, а столбцы содержат в хотя бы одна положительная запись:
matrix_list=[]
N=len(A)
for k in range(N):
B=A[k]
if (np.sum(B,axis=0)>1).all() and (np.sum(B,axis=1)==1).all():
matrix_list.append(B)
Этот подход, на мой взгляд, работает, но он довольно неэффективен. Могу ли я как-то создать свой список матриц, просто подумав, как сгенерировать все возможные матрицы, которые получаются в результате взятия простой матрицы, S:
S=np.matrix([[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0]])
, и создать все возможные матрицы, которые получаются в результате перестановки записей в каждой строке, без включая две матрицы, чьи суммы столбцов (будь то столбец 0 или столбец 1) равны нулю?