Estoy tratando de usar numpy.lib.stride_tricks.as_strided para iterar sobre bloques no superpuestos de una matriz, pero tengo problemas para encontrar la documentación de los parámetros, por lo que Solo he podido superponer bloques.Usando Numpy stride_tricks para obtener bloques de matriz que no se superpongan
Por ejemplo, tengo una matriz de 4x5 de la que me gustaría obtener 4 bloques de 2x2. Estoy de acuerdo con que se excluyan las celdas adicionales en el borde derecho e inferior.
Hasta ahora, mi código es:
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]]
La forma de la matriz de bloques resultante parece ser correcta, pero los dos últimos afirma fallan, presumiblemente debido a mi forma o zancadas parámetros son incorrectos. ¿Qué valores debo configurar para obtener bloques no superpuestos?
Gracias. Parece que nuestro a.itemsize difiere (el mío es 8). Refactoreé tu código para usar una fórmula (según tu explicación) para definir los avances, de modo que funcionará para todos. – Cerin