Как из матрицы создать n других матриц с размерностью k*k?
У меня есть матрица размером 3*3. Это массив numpy.
Вот пример:
[[30, 90, 80],
[93, 4, 92],
[72, 2, 37]]
Из этой матрицы я хочу создать другие матрицы размером 2*2, двигаясь с шагом 1 в правую сторону и вниз. Т. е. должны получиться следующие матрицы:
[[30, 90],
[93, 4]]
[[90, 80],
[4, 92]]
[[93, 4],
[72, 2]]
[[4, 92],
[2, 37]]
В реальной задаче, входная матрица размером 20 * 20 и сгенерированные матрицы должны быть 5*5.
Я хочу понять, как можно реализовать эту логику на более простом примере, чтобы потом использовать логику для решения задачи с матрицами размерности побольше. Как я могу с матрицы размерностью 3 * 3, получить матрицы 2 * 2 согласно логике описанной выше?
Спасибо
Ответы (1 шт):
Самый простой вариант:
import numpy as np
m = np.linspace(1,9,9).reshape([3,3])
Исходная матрица:
[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
Разбиваем:
for i in range(1, m.shape[0]):
for j in range(1, m.shape[0]):
print(m[i-1:i+1,j-1:j+1])
На выходе:
[[1. 2.]
[4. 5.]]
[[2. 3.]
[5. 6.]]
[[4. 5.]
[7. 8.]]
[[5. 6.]
[8. 9.]]
Предупреждение:
Имейте в виду, что если вы захотите присвоить полученные срезы переменным, не забудьте воспользоваться методом copy().