Вы можете использовать шаги для разделения массива:
image = np.arange(30000).reshape(100,100,3)
sub_shape = (10,10,3)
#divide the matrix into sub_matrices of subshape
view_shape = tuple(np.subtract(image.shape, sub_shape) + 1) + sub_shape
strides = image.strides + image.strides
sub_matrices = np.squeeze(np.lib.stride_tricks.as_strided(image,view_shape,strides)[::sub_shape[0],::sub_shape[1],:])
sub_matrices
shape:
(10, 10, 10, 10, 3)
sub_matrices[i,j,:,:,:]
- это [i,j]
-й подмассив.
В качестве альтернативы вы можете изменить форму своего изображения:
sub_shape = (10,10,3)
sub_matrices = np.swapaxes(image.reshape(image.shape[0]/sub_shape[0],sub_shape[0],image.shape[1]/sub_shape[1],sub_shape[1],image.shape[3]), 1, 2)
И снова sub_matrices[i,j,:,:,:]
- это [i,j]
-й подмассив.