Использование Numpy stride_tricks для получения неперекрывающихся блоков массива

Я пытаюсь использовать numpy.lib.stride_tricks.as_strided для перебора неперекрывающихся блоков массива, но у меня возникли проблемы с поиском документации по параметрам, поэтому я только удалось получить перекрывающиеся блоки.

Например, у меня есть массив 4x5, из которого я хотел бы получить 4 блока 2x2. Меня устраивает исключение лишних ячеек на правом и нижнем крае.

На данный момент мой код:

import sys
import numpy as np

a = np.array([
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
])

sz = a.itemsize
h,w = a.shape
bh,bw = 2,2

shape = (h/bh, w/bw, bh, bw)
strides = (w*sz, sz, w*sz, sz)
blocks = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)

print blocks[0][0]
assert blocks[0][0].tolist() == [[1, 2], [6,7]]
print blocks[0][1]
assert blocks[0][1].tolist() == [[3,4], [8,9]]
print blocks[1][0]
assert blocks[1][0].tolist() == [[11, 12], [16, 17]]

Форма результирующего массива блоков кажется правильной, но последние два утверждения не работают, предположительно из-за неправильных параметров моей формы или шагов. Какие значения для них я должен установить, чтобы получить неперекрывающиеся блоки?

12
задан Cerin 9 November 2011 в 22:04
поделиться