2016-11-09 6 views
3

Bei einem 3D-Array a möchte ich np.transpose für jedes Element im ersten Index aufrufen.
beispielsweise angesichts der Array:So transponieren Sie jedes Element in einem 3D-np-Array

array([[[1, 1, 1, 1], 
     [1, 1, 1, 1], 
     [1, 1, 1, 1]], 

     [[2, 2, 2, 2], 
     [2, 2, 2, 2], 
     [2, 2, 2, 2]], 

     [[3, 3, 3, 3], 
     [3, 3, 3, 3], 
     [3, 3, 3, 3]]) 

ich will:

array([[[1, 1, 1], 
     [1, 1, 1], 
     [1, 1, 1], 
     [1, 1, 1]], 

     [[2, 2, 2], 
     [2, 2, 2], 
     [2, 2, 2], 
     [2, 2, 2]], 

     [[3, 3, 3], 
     [3, 3, 3], 
     [3, 3, 3], 
     [3, 3, 3]]]) 

Grunde möchte ich jedes Element innerhalb der Matrix transponieren. Ich habe versucht, es umzugestalten, aber ich finde keinen guten Weg, es zu tun. Es durchzudrehen und transponieren, wäre zu langsam. Irgendein Rat?

+1

zur Umsetzung geben Sie die 'transpose' docs lesen. Es braucht einen Parameter. Etwas wie 'a.transpose ([0,2,1])'. – hpaulj

+0

Ist Ihr Array gerade mit 1,2 und 3 gefüllt, wie Sie zeigen? Wenn dies der Fall ist, wird die einfache Umformung funktionieren: 'arr.reshape (3,4,3)' – Julien

+0

Ihr Beispiel ist mehrdeutig. Es könnte ein Transpositions- oder Umformfall sein. – hpaulj

Antwort

6

Sie können die eingebaute in numpy transpose Methode verwenden und die Achsen direkt

>>> a = np.array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], 
        [[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]], 
        [[3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3]]]) 

>>> print(a.transpose((0, 2, 1))) 

[[[1 1 1] 
    [1 1 1] 
    [1 1 1] 
    [1 1 1]] 

[[2 2 2] 
    [2 2 2] 
    [2 2 2] 
    [2 2 2]] 

[[3 3 3] 
    [3 3 3] 
    [3 3 3] 
    [3 3 3]]] 
Verwandte Themen