2015-10-13 18 views
6

Mam trudności ze zrozumieniem, jak działa numpy.transpose. Na przykładJak działa numpy.transpose dla tego przykładu?

a_value = array([[[0, 1], 
        [2, 3]], 

       [[4, 5], 
        [6, 7]]]) 

i kiedy zrobić

np.transpose(a_value, (2, 1, 0)) 

uzyskać

array([[[0, 4], 
     [2, 6]], 

     [[1, 5], 
     [3, 7]]]) 

Jak mogę czerpać tę transpozycję ręcznie? Muszę zrozumieć intuicyjnie formułę lub kroki w powyższym przypadku, aby móc ją uogólnić dla wyższych wymiarów.

+3

Czy przeczytałeś dokumentację, np. 'Help (numpy.transpose)'? Po prostu "permutujesz" wymiary. Jeśli przekażesz permutację '(2, 1, 0)', to element, który był na pozycji '[x, y, z]' będzie teraz w pozycji '[z, y, x]' lub w pozycji ' [z, x, y] 'dla permutacji' (3, 0, 1) ' –

+0

Dzięki @tobias_k –

Odpowiedz

12

jak podano w documentation -

numpy.transpose(a, axes=None)

osiach: listę wskazówki, opcjonalnie Domyślnie odwrócić wymiary inaczej permutacji osi zgodnie z wartościami podanymi.

Drugi argument to osie, w których wartości są permutowane. To jest na przykład, jeśli indeks elementu początkowego to (x,y,z) (gdzie x jest 0-tą osią, y jest 1. osią, a z jest 2. osią), pozycja tego elementu w wynikowej tablicy staje się (z, y, x) (to jest 2 osie pierwsza, potem 1 oś, a ostatnia 0 osie), na podstawie argumentu podanego dla axes.

Ponieważ jesteś transpozycji tablicę kształt (2,2,2), transponowanego kształt jest również (2,2,2), a pozycje zmieni as -

(0,0,0) -> (0,0,0) 
(1,0,0) -> (0,0,1) 
(0,1,0) -> (0,1,0) 
(1,1,0) -> (0,1,1) 
... 

od osi do wyboru są trywialne, pozwala wyjaśnić to dla kolejne osie. Przykład -

In [54]: A = np.arange(30).reshape((2, 3, 5)) 
In [55]: A 
Out[55]: 
array([[[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14]], 

     [[15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24], 
     [25, 26, 27, 28, 29]]]) 

In [56]: np.transpose(A,(1,2,0)) 
Out[56]: 
array([[[ 0, 15], 
     [ 1, 16], 
     [ 2, 17], 
     [ 3, 18], 
     [ 4, 19]], 

     [[ 5, 20], 
     [ 6, 21], 
     [ 7, 22], 
     [ 8, 23], 
     [ 9, 24]], 

     [[10, 25], 
     [11, 26], 
     [12, 27], 
     [13, 28], 
     [14, 29]]]) 

W tym przypadku, pierwszy element (0,0,0) się element w wyniku (0,0,0).

Drugi element (0,0,1) staje się elementem (0,1,0) w wyniku. I tak dalej -

(0,0,0) -> (0,0,0) 
(0,0,1) -> (0,1,0) 
(0,0,2) -> (0,2,0) 
... 
(2,3,4) -> (3,4,2) 
... 
+0

Dzięki za proste wyjaśnienie. –