2016-04-26 6 views
1

Ich habe eine 3D-Array in numpy, die ich in ein 1D-Array abflachen möchte. Ich möchte jede 2d "Schicht" des Arrays abflachen und jede nachfolgende Schicht in das 1d Array kopieren. B. für ein Array mit arr[:, :, 0] = [[1, 2], [3, 4]] und arr[:, :, 1] = [[5, 6], [7, 8]] möchte ich den Ausgang [1, 2, 3, 4, 5, 6, 7, 8] sein.Wie entlang der 3. Dimension in numply glätten?

Zur Zeit habe ich den folgenden Code:

out = np.empty(arr.size) 
for c in xrange(arr.shape[2]): 
    layer = arr[:, :, c] 
    out[c * layer.size:(c + 1) * layer.size] = layer.ravel() 

Gibt es eine Möglichkeit, dies in numpy effizient zu erreichen (ohne for Schleife)? Ich habe versucht, mit reshape, transpose und flatten vergeblich herum zu verspielen.

Antwort

1

Oder (die letzte Axt wird zuerst): np.rollaxis(a,-1).ravel()

2

ich es herausgefunden:

out = arr.transpose((2, 0, 1)).flatten()

Verwandte Themen