W numpy, jak skutecznie wyświetlać wszystkie podmacierze o stałym rozmiarze?

Mam dowolną macierz NxM, na przykład:

1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 0 1 2 3 4

Chcę uzyskać listę wszystkich podmacierzy 3x3 w tej macierzy:

1 2 3       2 3 4               0 1 2
7 8 9   ;   8 9 0   ;  ...  ;   6 7 8
3 4 5       4 5 6               2 3 4

Mogę to zrobić za pomocą dwóch zagnieżdżonych pętli:

rows, cols = input_matrix.shape
patches = []
for row in np.arange(0, rows - 3):
    for col in np.arange(0, cols - 3):
        patches.append(input_matrix[row:row+3, col:col+3])

Ale dla dużej matrycy wejściowej jest to powolne.Czy istnieje sposób, aby zrobić to szybciej z numpy?

Obejrzałemnp.split, ale to daje mi nienakładające się pod macierze, podczas gdy chcę wszystkich możliwych podmacierzy, niezależnie od nakładania się.

questionAnswers(1)

yourAnswerToTheQuestion