Разбить трехмерный массив на трехмерные блоки

Я хотел бы разделить массив трехмерных блоков на трехмерные блоки «питоническим» образом. Я работаю с последовательностями изображений, которые представляют собой несколько большие массивы (1000X1200X1600), поэтому мне нужно разделить их на части, чтобы выполнить свою обработку.

Я написал функции для этого, но мне интересно, есть ли какой-нибудь нудистый способ сделать это - numpy.split, похоже, не выполняет то, что я хочу для 3D-массивов (но, возможно, я не понимаю его функциональность)

Чтобы было ясно: код ниже выполняет мою задачу, но я ищу более быстрый способ сделать это.

def make_blocks(x,t):
#x should be a yXmXn matrix, and t should even divides m,n
#returns a list of 3D blocks of size yXtXt 
    down =  range(0,x.shape[1],t)
    across = range(0,x.shape[2],t)
    reshaped = []
    for d in down:
        for a in across:
            reshaped.append(x[:,d:d+t,a:a+t])
    return reshaped

def unmake_blocks(x,d,m,n):
#this takes a list of matrix blocks of size dXd that is m*n/d^2 long 
#returns a 2D array of size mXn
    rows = []
    for i in range(0,int(m/d)):
        rows.append(np.hstack(x[i*int(n/d):(i+1)*int(n/d)]))
    return np.vstack(rows)

Ответы на вопрос(1)

Ваш ответ на вопрос