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ę.