2016-12-08 7 views
1

Ich habe ein 4d numpy Array, das ein Dataset mit 3D-Instanzen darstellt. Sagen wir, dass die Form des Arrays (32, 32, 3, 73257) ist.Umordnen eines 4d numpy Array

Wie kann ich die Form des Arrays zu (73257, 32, 32, 3) ändern?

--- Frage Update Es scheint, dass sowohl Rollaxis und Transpose den Trick machen.

Danke für die Antwort!

+1

Verwandte - http://stackoverflow.com/questions/41022182/change-shape-of-nparray – Divakar

+0

"transpose" würde auch hier funktionieren, wenn Sie '' (3, 0, 1, 2) ' – Eric

+0

verwenden Sie haben Recht . Ich werde meine Antwort so schnell wie möglich korrigieren. – Panos

Antwort

4

Die np.transpose Funktion genau das tut, was Sie wollen, können Sie eine Achse Argument übergeben, die steuert, die Sie tauschen wollen Achse:

a = np.empty((32, 32, 3, 73257)) 
b = np.transpose(a, (3, 0, 1, 2)) 

Die Achsen von b sind permutierte Versionen von denen von a: die Achse 0 von b ist die 3. Achse von a, die Achse 1 von b ist die 0-Achse von a usw.

Auf diese Weise können Sie festlegen, welche der Achse der Größe 32 Sie in der zweiten wollen oder an dritter Stelle angeben:

b = np.transpose(a, (3, 1, 0, 2)) 

gibt auch eine Reihe von der gewünschten Form, ist aber unterscheidet sich von der vorherigen.

0

Es sieht aus wie np.rollaxis(arr, axis=-1) wird tun, was Sie wollen. Beispiel:

>>> arr = np.empty(32, 32, 3, 73257) 
>>> arr2 = np.rollaxis(arr, axis=-1) 
>>> arr2.shape 
(73257, 32, 32, 3) 

Das macht arr[i,j,k,l] == arr2[l,i,j,k] alle für ijkl

Verwandte Themen