Подматрица элемента Numpy

Допустим есть матрица matr размером 100х100, пишем простой алогоритм на Python с двумя for для прохода по данной матрице, и нам нужно получать подматрицы размером 3х3 от элемента matr[i][j], после чего мы должны произвести некоторую операцию с подматрицей, которую получили. Вопрос такой: есть ли какойто простой способ (без пложения циклов) получить подматрицу размером 3х3, где верхний угловой элемент подматрицы matr[i][j], а нижний угловой элемент подматриы matr[i+2][j+2]? Я посмотрел и нашел, что элементы numpy имеют оси. Можно ли как то за счёт осей axis=0(ось строк) и axis=1(ось столбцов) выделить подматрицу, ограничив количество элементов по осям тремя элементами?


Ответы (1 шт):

Автор решения: CrazyElf

Numpy вполне понимает срезы:

import numpy as np

arr = np.eye(10)
for i in range(10):
    arr[i,i] += i
for i in [2,5,7]:
    print(arr[i:i+3,i:i+3])

Вывод:

[[3. 0. 0.]
 [0. 4. 0.]
 [0. 0. 5.]]

[[6. 0. 0.]
 [0. 7. 0.]
 [0. 0. 8.]]

[[ 8.  0.  0.]
 [ 0.  9.  0.]
 [ 0.  0. 10.]]
→ Ссылка