Как из матрицы 9 на 9 выделить 9 матриц размером 3 на 3
Всем привет, как из матрицы 9 на 9 сделать 9 матриц размером 3 на 3 в python , принцип как в судоку, например из:
[[1,2,3,4,5,6,7,8,9]
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9]]
В такую ->
[[1,2,3,1,2,3,1,2,3],
[1,2,3,1,2,3,1,2,3],
[1,2,3,1,2,3,1,2,3],
[4,5,6,4,5,6,4,5,6],
[4,5,6,4,5,6,4,5,6],
[4,5,6,4,5,6,4,5,6],
[7,8,9,7,8,9,7,8,9],
[7,8,9,7,8,9,7,8,9],
[7,8,9,7,8,9,7,8,9]]
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
https://ideone.com/Zm0vMz
https://ideone.com/PALFZb
a = [
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9],
[1,2,3,4,5,6,7,8,9]
]
b = [[x for r in a[i:i+3] for x in r[j:j+3]] for j in range(0,9,3) for i in range(0,9,3)]
print(b)
Автор решения: вася
→ Ссылка
9 матриц 3x3:
class Matrix(list):
def __init__(self, *args):
list.__init__(self, *args)
def __getitem__(self, item):
try:
return list.__getitem__(self, item)
except TypeError:
rows, cols = item
return [row[cols] for row in self[rows]]
def split(a, n, m):
for i in range(0, len(a), n):
for j in range(0, len(a[0]), m):
yield a[i:i+n,j:j+m]
# matrix = Matrix([[1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9],
# [1, 2, 3, 4, 5, 6, 7, 8, 9]])
matrix = Matrix([[1, 2, 3, 1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6, 4, 5, 6],
[7, 8, 9, 7, 8, 9, 7, 8, 9],
[1, 2, 3, 1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6, 4, 5, 6],
[7, 8, 9, 7, 8, 9, 7, 8, 9],
[1, 2, 3, 1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6, 4, 5, 6],
[7, 8, 9, 7, 8, 9, 7, 8, 9]])
matrices = list(split(matrix, 3, 3))
import pprint
pprint.pprint(matrices)