This solution can take an input matrix of any depth and dimensions. By using a recursive generator function, possible value ranges (in this case [0, 1]
) can be more easily traversed as part of the combinations building process:
def prod(d, c = []):
yield from ([c] if not d else [j for k in d[0] for j in prod(d[1:], c+[k])])
def matrix_combinations(m):
for i in prod([[0, 1] if not i else [*matrix_combinations(i)] for i in m]):
yield list(i)
print(list(matrix_combinations([[0, 0, 0], [0, 0, 0]])))
print(list(matrix_combinations([[0, [0, [0, 0]], 0], [0, 0, [0]]])))
Output:
[[[0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 1]], [[0, 0, 0], [0, 1, 0]], [[0, 0, 0], [0, 1, 1]], [[0, 0, 0], [1, 0, 0]], [[0, 0, 0], [1, 0, 1]], [[0, 0, 0], [1, 1, 0]], [[0, 0, 0], [1, 1, 1]], [[0, 0, 1], [0, 0, 0]], [[0, 0, 1], [0, 0, 1]], [[0, 0, 1], [0, 1, 0]], [[0, 0, 1], [0, 1, 1]], [[0, 0, 1], [1, 0, 0]], [[0, 0, 1], [1, 0, 1]], [[0, 0, 1], [1, 1, 0]], [[0, 0, 1], [1, 1, 1]], [[0, 1, 0], [0, 0, 0]], [[0, 1, 0], [0, 0, 1]], [[0, 1, 0], [0, 1, 0]], [[0, 1, 0], [0, 1, 1]], [[0, 1, 0], [1, 0, 0]], [[0, 1, 0], [1, 0, 1]], [[0, 1, 0], [1, 1, 0]], [[0, 1, 0], [1, 1, 1]], [[0, 1, 1], [0, 0, 0]], [[0, 1, 1], [0, 0, 1]], [[0, 1, 1], [0, 1, 0]], [[0, 1, 1], [0, 1, 1]], [[0, 1, 1], [1, 0, 0]], [[0, 1, 1], [1, 0, 1]], [[0, 1, 1], [1, 1, 0]], [[0, 1, 1], [1, 1, 1]], [[1, 0, 0], [0, 0, 0]], [[1, 0, 0], [0, 0, 1]], [[1, 0, 0], [0, 1, 0]], [[1, 0, 0], [0, 1, 1]], [[1, 0, 0], [1, 0, 0]], [[1, 0, 0], [1, 0, 1]], [[1, 0, 0], [1, 1, 0]], [[1, 0, 0], [1, 1, 1]], [[1, 0, 1], [0, 0, 0]], [[1, 0, 1], [0, 0, 1]], [[1, 0, 1], [0, 1, 0]], [[1, 0, 1], [0, 1, 1]], [[1, 0, 1], [1, 0, 0]], [[1, 0, 1], [1, 0, 1]], [[1, 0, 1], [1, 1, 0]], [[1, 0, 1], [1, 1, 1]], [[1, 1, 0], [0, 0, 0]], [[1, 1, 0], [0, 0, 1]], [[1, 1, 0], [0, 1, 0]], [[1, 1, 0], [0, 1, 1]], [[1, 1, 0], [1, 0, 0]], [[1, 1, 0], [1, 0, 1]], [[1, 1, 0], [1, 1, 0]], [[1, 1, 0], [1, 1, 1]], [[1, 1, 1], [0, 0, 0]], [[1, 1, 1], [0, 0, 1]], [[1, 1, 1], [0, 1, 0]], [[1, 1, 1], [0, 1, 1]], [[1, 1, 1], [1, 0, 0]], [[1, 1, 1], [1, 0, 1]], [[1, 1, 1], [1, 1, 0]], [[1, 1, 1], [1, 1, 1]]]
[[[0, [0, [0, 0]], 0], [0, 0, [0]]], [[0, [0, [0, 0]], 0], [0, 0, [1]]], [[0, [0, [0, 0]], 0], [0, 1, [0]]], [[0, [0, [0, 0]], 0], [0, 1, [1]]], [[0, [0, [0, 0]], 0], [1, 0, [0]]], [[0, [0, [0, 0]], 0], [1, 0, [1]]], [[0, [0, [0, 0]], 0], [1, 1, [0]]], [[0, [0, [0, 0]], 0], [1, 1, [1]]], [[0, [0, [0, 0]], 1], [0, 0, [0]]], [[0, [0, [0, 0]], 1], [0, 0, [1]]], [[0, [0, [0, 0]], 1], [0, 1, [0]]], [[0, [0, [0, 0]], 1], [0, 1, [1]]], [[0, [0, [0, 0]], 1], [1, 0, [0]]], [[0, [0, [0, 0]], 1], [1, 0, [1]]], [[0, [0, [0, 0]], 1], [1, 1, [0]]], [[0, [0, [0, 0]], 1], [1, 1, [1]]], [[0, [0, [0, 1]], 0], [0, 0, [0]]], [[0, [0, [0, 1]], 0], [0, 0, [1]]], [[0, [0, [0, 1]], 0], [0, 1, [0]]], [[0, [0, [0, 1]], 0], [0, 1, [1]]], [[0, [0, [0, 1]], 0], [1, 0, [0]]], [[0, [0, [0, 1]], 0], [1, 0, [1]]], [[0, [0, [0, 1]], 0], [1, 1, [0]]], [[0, [0, [0, 1]], 0], [1, 1, [1]]], [[0, [0, [0, 1]], 1], [0, 0, [0]]], [[0, [0, [0, 1]], 1], [0, 0, [1]]], [[0, [0, [0, 1]], 1], [0, 1, [0]]], [[0, [0, [0, 1]], 1], [0, 1, [1]]], [[0, [0, [0, 1]], 1], [1, 0, [0]]], [[0, [0, [0, 1]], 1], [1, 0, [1]]], [[0, [0, [0, 1]], 1], [1, 1, [0]]], [[0, [0, [0, 1]], 1], [1, 1, [1]]], [[0, [0, [1, 0]], 0], [0, 0, [0]]], [[0, [0, [1, 0]], 0], [0, 0, [1]]], [[0, [0, [1, 0]], 0], [0, 1, [0]]], [[0, [0, [1, 0]], 0], [0, 1, [1]]], [[0, [0, [1, 0]], 0], [1, 0, [0]]], [[0, [0, [1, 0]], 0], [1, 0, [1]]], [[0, [0, [1, 0]], 0], [1, 1, [0]]], [[0, [0, [1, 0]], 0], [1, 1, [1]]], [[0, [0, [1, 0]], 1], [0, 0, [0]]], [[0, [0, [1, 0]], 1], [0, 0, [1]]], [[0, [0, [1, 0]], 1], [0, 1, [0]]], [[0, [0, [1, 0]], 1], [0, 1, [1]]], [[0, [0, [1, 0]], 1], [1, 0, [0]]], [[0, [0, [1, 0]], 1], [1, 0, [1]]], [[0, [0, [1, 0]], 1], [1, 1, [0]]], [[0, [0, [1, 0]], 1], [1, 1, [1]]], [[0, [0, [1, 1]], 0], [0, 0, [0]]], [[0, [0, [1, 1]], 0], [0, 0, [1]]], [[0, [0, [1, 1]], 0], [0, 1, [0]]], [[0, [0, [1, 1]], 0], [0, 1, [1]]], [[0, [0, [1, 1]], 0], [1, 0, [0]]], [[0, [0, [1, 1]], 0], [1, 0, [1]]], [[0, [0, [1, 1]], 0], [1, 1, [0]]], [[0, [0, [1, 1]], 0], [1, 1, [1]]], [[0, [0, [1, 1]], 1], [0, 0, [0]]], [[0, [0, [1, 1]], 1], [0, 0, [1]]], [[0, [0, [1, 1]], 1], [0, 1, [0]]], [[0, [0, [1, 1]], 1], [0, 1, [1]]], [[0, [0, [1, 1]], 1], [1, 0, [0]]], [[0, [0, [1, 1]], 1], [1, 0, [1]]], [[0, [0, [1, 1]], 1], [1, 1, [0]]], [[0, [0, [1, 1]], 1], [1, 1, [1]]], [[0, [1, [0, 0]], 0], [0, 0, [0]]], [[0, [1, [0, 0]], 0], [0, 0, [1]]], [[0, [1, [0, 0]], 0], [0, 1, [0]]], [[0, [1, [0, 0]], 0], [0, 1, [1]]], [[0, [1, [0, 0]], 0], [1, 0, [0]]], [[0, [1, [0, 0]], 0], [1, 0, [1]]], [[0, [1, [0, 0]], 0], [1, 1, [0]]], [[0, [1, [0, 0]], 0], [1, 1, [1]]], [[0, [1, [0, 0]], 1], [0, 0, [0]]], [[0, [1, [0, 0]], 1], [0, 0, [1]]], [[0, [1, [0, 0]], 1], [0, 1, [0]]], [[0, [1, [0, 0]], 1], [0, 1, [1]]], [[0, [1, [0, 0]], 1], [1, 0, [0]]], [[0, [1, [0, 0]], 1], [1, 0, [1]]], [[0, [1, [0, 0]], 1], [1, 1, [0]]], [[0, [1, [0, 0]], 1], [1, 1, [1]]], [[0, [1, [0, 1]], 0], [0, 0, [0]]], [[0, [1, [0, 1]], 0], [0, 0, [1]]], [[0, [1, [0, 1]], 0], [0, 1, [0]]], [[0, [1, [0, 1]], 0], [0, 1, [1]]], [[0, [1, [0, 1]], 0], [1, 0, [0]]], [[0, [1, [0, 1]], 0], [1, 0, [1]]], [[0, [1, [0, 1]], 0], [1, 1, [0]]], [[0, [1, [0, 1]], 0], [1, 1, [1]]], [[0, [1, [0, 1]], 1], [0, 0, [0]]], [[0, [1, [0, 1]], 1], [0, 0, [1]]], [[0, [1, [0, 1]], 1], [0, 1, [0]]], [[0, [1, [0, 1]], 1], [0, 1, [1]]], [[0, [1, [0, 1]], 1], [1, 0, [0]]], [[0, [1, [0, 1]], 1], [1, 0, [1]]], [[0, [1, [0, 1]], 1], [1, 1, [0]]], [[0, [1, [0, 1]], 1], [1, 1, [1]]], [[0, [1, [1, 0]], 0], [0, 0, [0]]], [[0, [1, [1, 0]], 0], [0, 0, [1]]], [[0, [1, [1, 0]], 0], [0, 1, [0]]], [[0, [1, [1, 0]], 0], [0, 1, [1]]], [[0, [1, [1, 0]], 0], [1, 0, [0]]], [[0, [1, [1, 0]], 0], [1, 0, [1]]], [[0, [1, [1, 0]], 0], [1, 1, [0]]], [[0, [1, [1, 0]], 0], [1, 1, [1]]], [[0, [1, [1, 0]], 1], [0, 0, [0]]], [[0, [1, [1, 0]], 1], [0, 0, [1]]], [[0, [1, [1, 0]], 1], [0, 1, [0]]], [[0, [1, [1, 0]], 1], [0, 1, [1]]], [[0, [1, [1, 0]], 1], [1, 0, [0]]], [[0, [1, [1, 0]], 1], [1, 0, [1]]], [[0, [1, [1, 0]], 1], [1, 1, [0]]], [[0, [1, [1, 0]], 1], [1, 1, [1]]], [[0, [1, [1, 1]], 0], [0, 0, [0]]], [[0, [1, [1, 1]], 0], [0, 0, [1]]], [[0, [1, [1, 1]], 0], [0, 1, [0]]], [[0, [1, [1, 1]], 0], [0, 1, [1]]], [[0, [1, [1, 1]], 0], [1, 0, [0]]], [[0, [1, [1, 1]], 0], [1, 0, [1]]], [[0, [1, [1, 1]], 0], [1, 1, [0]]], [[0, [1, [1, 1]], 0], [1, 1, [1]]], [[0, [1, [1, 1]], 1], [0, 0, [0]]], [[0, [1, [1, 1]], 1], [0, 0, [1]]], [[0, [1, [1, 1]], 1], [0, 1, [0]]], [[0, [1, [1, 1]], 1], [0, 1, [1]]], [[0, [1, [1, 1]], 1], [1, 0, [0]]], [[0, [1, [1, 1]], 1], [1, 0, [1]]], [[0, [1, [1, 1]], 1], [1, 1, [0]]], [[0, [1, [1, 1]], 1], [1, 1, [1]]], [[1, [0, [0, 0]], 0], [0, 0, [0]]], [[1, [0, [0, 0]], 0], [0, 0, [1]]], [[1, [0, [0, 0]], 0], [0, 1, [0]]], [[1, [0, [0, 0]], 0], [0, 1, [1]]], [[1, [0, [0, 0]], 0], [1, 0, [0]]], [[1, [0, [0, 0]], 0], [1, 0, [1]]], [[1, [0, [0, 0]], 0], [1, 1, [0]]], [[1, [0, [0, 0]], 0], [1, 1, [1]]], [[1, [0, [0, 0]], 1], [0, 0, [0]]], [[1, [0, [0, 0]], 1], [0, 0, [1]]], [[1, [0, [0, 0]], 1], [0, 1, [0]]], [[1, [0, [0, 0]], 1], [0, 1, [1]]], [[1, [0, [0, 0]], 1], [1, 0, [0]]], [[1, [0, [0, 0]], 1], [1, 0, [1]]], [[1, [0, [0, 0]], 1], [1, 1, [0]]], [[1, [0, [0, 0]], 1], [1, 1, [1]]], [[1, [0, [0, 1]], 0], [0, 0, [0]]], [[1, [0, [0, 1]], 0], [0, 0, [1]]], [[1, [0, [0, 1]], 0], [0, 1, [0]]], [[1, [0, [0, 1]], 0], [0, 1, [1]]], [[1, [0, [0, 1]], 0], [1, 0, [0]]], [[1, [0, [0, 1]], 0], [1, 0, [1]]], [[1, [0, [0, 1]], 0], [1, 1, [0]]], [[1, [0, [0, 1]], 0], [1, 1, [1]]], [[1, [0, [0, 1]], 1], [0, 0, [0]]], [[1, [0, [0, 1]], 1], [0, 0, [1]]], [[1, [0, [0, 1]], 1], [0, 1, [0]]], [[1, [0, [0, 1]], 1], [0, 1, [1]]], [[1, [0, [0, 1]], 1], [1, 0, [0]]], [[1, [0, [0, 1]], 1], [1, 0, [1]]], [[1, [0, [0, 1]], 1], [1, 1, [0]]], [[1, [0, [0, 1]], 1], [1, 1, [1]]], [[1, [0, [1, 0]], 0], [0, 0, [0]]], [[1, [0, [1, 0]], 0], [0, 0, [1]]], [[1, [0, [1, 0]], 0], [0, 1, [0]]], [[1, [0, [1, 0]], 0], [0, 1, [1]]], [[1, [0, [1, 0]], 0], [1, 0, [0]]], [[1, [0, [1, 0]], 0], [1, 0, [1]]], [[1, [0, [1, 0]], 0], [1, 1, [0]]], [[1, [0, [1, 0]], 0], [1, 1, [1]]], [[1, [0, [1, 0]], 1], [0, 0, [0]]], [[1, [0, [1, 0]], 1], [0, 0, [1]]], [[1, [0, [1, 0]], 1], [0, 1, [0]]], [[1, [0, [1, 0]], 1], [0, 1, [1]]], [[1, [0, [1, 0]], 1], [1, 0, [0]]], [[1, [0, [1, 0]], 1], [1, 0, [1]]], [[1, [0, [1, 0]], 1], [1, 1, [0]]], [[1, [0, [1, 0]], 1], [1, 1, [1]]], [[1, [0, [1, 1]], 0], [0, 0, [0]]], [[1, [0, [1, 1]], 0], [0, 0, [1]]], [[1, [0, [1, 1]], 0], [0, 1, [0]]], [[1, [0, [1, 1]], 0], [0, 1, [1]]], [[1, [0, [1, 1]], 0], [1, 0, [0]]], [[1, [0, [1, 1]], 0], [1, 0, [1]]], [[1, [0, [1, 1]], 0], [1, 1, [0]]], [[1, [0, [1, 1]], 0], [1, 1, [1]]], [[1, [0, [1, 1]], 1], [0, 0, [0]]], [[1, [0, [1, 1]], 1], [0, 0, [1]]], [[1, [0, [1, 1]], 1], [0, 1, [0]]], [[1, [0, [1, 1]], 1], [0, 1, [1]]], [[1, [0, [1, 1]], 1], [1, 0, [0]]], [[1, [0, [1, 1]], 1], [1, 0, [1]]], [[1, [0, [1, 1]], 1], [1, 1, [0]]], [[1, [0, [1, 1]], 1], [1, 1, [1]]], [[1, [1, [0, 0]], 0], [0, 0, [0]]], [[1, [1, [0, 0]], 0], [0, 0, [1]]], [[1, [1, [0, 0]], 0], [0, 1, [0]]], [[1, [1, [0, 0]], 0], [0, 1, [1]]], [[1, [1, [0, 0]], 0], [1, 0, [0]]], [[1, [1, [0, 0]], 0], [1, 0, [1]]], [[1, [1, [0, 0]], 0], [1, 1, [0]]], [[1, [1, [0, 0]], 0], [1, 1, [1]]], [[1, [1, [0, 0]], 1], [0, 0, [0]]], [[1, [1, [0, 0]], 1], [0, 0, [1]]], [[1, [1, [0, 0]], 1], [0, 1, [0]]], [[1, [1, [0, 0]], 1], [0, 1, [1]]], [[1, [1, [0, 0]], 1], [1, 0, [0]]], [[1, [1, [0, 0]], 1], [1, 0, [1]]], [[1, [1, [0, 0]], 1], [1, 1, [0]]], [[1, [1, [0, 0]], 1], [1, 1, [1]]], [[1, [1, [0, 1]], 0], [0, 0, [0]]], [[1, [1, [0, 1]], 0], [0, 0, [1]]], [[1, [1, [0, 1]], 0], [0, 1, [0]]], [[1, [1, [0, 1]], 0], [0, 1, [1]]], [[1, [1, [0, 1]], 0], [1, 0, [0]]], [[1, [1, [0, 1]], 0], [1, 0, [1]]], [[1, [1, [0, 1]], 0], [1, 1, [0]]], [[1, [1, [0, 1]], 0], [1, 1, [1]]], [[1, [1, [0, 1]], 1], [0, 0, [0]]], [[1, [1, [0, 1]], 1], [0, 0, [1]]], [[1, [1, [0, 1]], 1], [0, 1, [0]]], [[1, [1, [0, 1]], 1], [0, 1, [1]]], [[1, [1, [0, 1]], 1], [1, 0, [0]]], [[1, [1, [0, 1]], 1], [1, 0, [1]]], [[1, [1, [0, 1]], 1], [1, 1, [0]]], [[1, [1, [0, 1]], 1], [1, 1, [1]]], [[1, [1, [1, 0]], 0], [0, 0, [0]]], [[1, [1, [1, 0]], 0], [0, 0, [1]]], [[1, [1, [1, 0]], 0], [0, 1, [0]]], [[1, [1, [1, 0]], 0], [0, 1, [1]]], [[1, [1, [1, 0]], 0], [1, 0, [0]]], [[1, [1, [1, 0]], 0], [1, 0, [1]]], [[1, [1, [1, 0]], 0], [1, 1, [0]]], [[1, [1, [1, 0]], 0], [1, 1, [1]]], [[1, [1, [1, 0]], 1], [0, 0, [0]]], [[1, [1, [1, 0]], 1], [0, 0, [1]]], [[1, [1, [1, 0]], 1], [0, 1, [0]]], [[1, [1, [1, 0]], 1], [0, 1, [1]]], [[1, [1, [1, 0]], 1], [1, 0, [0]]], [[1, [1, [1, 0]], 1], [1, 0, [1]]], [[1, [1, [1, 0]], 1], [1, 1, [0]]], [[1, [1, [1, 0]], 1], [1, 1, [1]]], [[1, [1, [1, 1]], 0], [0, 0, [0]]], [[1, [1, [1, 1]], 0], [0, 0, [1]]], [[1, [1, [1, 1]], 0], [0, 1, [0]]], [[1, [1, [1, 1]], 0], [0, 1, [1]]], [[1, [1, [1, 1]], 0], [1, 0, [0]]], [[1, [1, [1, 1]], 0], [1, 0, [1]]], [[1, [1, [1, 1]], 0], [1, 1, [0]]], [[1, [1, [1, 1]], 0], [1, 1, [1]]], [[1, [1, [1, 1]], 1], [0, 0, [0]]], [[1, [1, [1, 1]], 1], [0, 0, [1]]], [[1, [1, [1, 1]], 1], [0, 1, [0]]], [[1, [1, [1, 1]], 1], [0, 1, [1]]], [[1, [1, [1, 1]], 1], [1, 0, [0]]], [[1, [1, [1, 1]], 1], [1, 0, [1]]], [[1, [1, [1, 1]], 1], [1, 1, [0]]], [[1, [1, [1, 1]], 1], [1, 1, [1]]]]