Split ein 3D Numpy Array in 3D Blöcke

Ich möchte ein 3D-Numpy-Array 'pythonisch' in 3D-Blöcke aufteilen. Ich arbeite mit Bildsequenzen, die etwas große Arrays (1000X1200X1600) sind, daher muss ich sie für die Verarbeitung in Teile aufteilen.

Ich habe Funktionen geschrieben, um dies zu tun, aber ich frage mich, ob es einen nativen Weg gibt, dies zu erreichen - numpy.split scheint nicht das zu tun, was ich für 3D-Arrays will (aber vielleicht verstehe ich seine Funktionalität nicht)

Um klar zu sein: Der folgende Code erfüllt meine Aufgabe, aber ich suche einen schnelleren Weg, dies zu tun.

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)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage