2013-06-13 10 views
21

Od Numpy's tutorial, oś może być indeksowana za pomocą liczb całkowitych, np. 0 jest dla kolumny, 1 jest dla wiersza, ale nie rozumiem, dlaczego są one indeksowane w ten sposób? I jak mogę obliczyć indeks każdej osi podczas radzenia sobie z tablicą wielowymiarową?jak jest indeksowana oś w tablicy numpy?

+5

'0' powinien odnosić się do wierszy, a' 1' powinien odnosić się do kolumn. Podejrzewam, że myślisz o np. '.sum (axis = 0)', która sumuje * wzdłuż * wierszy (tworząc sumy kolumn). – nneonneo

+0

@nneonneo, tak to mam na myśli, więc skąd mam znać indeks każdej osi? – Alcott

Odpowiedz

48

Z definicji numer osi wymiaru jest indeksem tego wymiaru w tablicy shape. Jest to również pozycja używana do uzyskania dostępu do tego wymiaru podczas indeksowania.

Na przykład, jeśli macierz dwuwymiarowa a ma kształt (5,6), wówczas można uzyskać dostęp do a[0,0] do a[4,5]. Oś 0 jest zatem pierwszym wymiarem ("rzędy"), a oś 1 to drugi wymiar ("kolumny"). W wyższych wymiarach, gdzie "rząd" i "kolumna" przestają mieć sens, spróbuj myśleć o osiach w kategoriach kształtów i indeksów.

Jeśli wykonasz na przykład .sum(axis=n), wymiar n zostanie zwinięty i usunięty, a wszystkie wartości w nowej macierzy będą równe sumie odpowiadających wartości zwiniętych. Na przykład, jeśli b ma kształt (5,6,7,8), a robisz c = b.sum(axis=2), to oś 2 (wymiar o rozmiarze 7) jest zwinięta, a wynik ma kształt (5,6,8). Ponadto c[x,y,z] jest równa sumie wszystkich elementów c[x,y,:,z].

+0

Dziękuję bardzo. – Alcott

+0

Dzięki za tę odpowiedź. Wiele dla mnie wyjaśniło. –

+1

to może pomóc w wizualizacji https://youtu.be/gtejJ3RCddE?t=2h38m15s – bicepjai

5

Ogólnie, oś = 0, oznacza wszystkie komórki z pierwszym wymiarze różne dla każdej wartości 2 wymiary i 3. wymiaru itd

Na przykład tablica 2-wymiarowa dwa odpowiednie osie: pierwszy działa pionowo w dół w poprzek rzędów (oś 0), a drugi pracuje poziomo wzdłuż kolumn (oś 1)

na 3D, staje się skomplikowany, więc korzystać z wielu dla pętli

>>> x = np.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]]]) 

>>> x.shape #(3, 3, 3) 

#axis = 0 
>>> for j in range(0, x.shape[1]): 
     for k in range(0, x.shape[2]): 
     print("element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ]) 
... 
element = (0, 0) [0, 9, 18]    #sum is 27 
element = (0, 1) [1, 10, 19]   #sum is 30 
element = (0, 2) [2, 11, 20] 
element = (1, 0) [3, 12, 21] 
element = (1, 1) [4, 13, 22] 
element = (1, 2) [5, 14, 23] 
element = (2, 0) [6, 15, 24] 
element = (2, 1) [7, 16, 25] 
element = (2, 2) [8, 17, 26] 

>>> x.sum(axis=0)    
array([[27, 30, 33], 
     [36, 39, 42], 
     [45, 48, 51]]) 

#axis = 1  
for i in range(0, x.shape[0]): 
    for k in range(0, x.shape[2]): 
     print("element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ]) 

element = (0, 0) [0, 3, 6]  #sum is 9 
element = (0, 1) [1, 4, 7] 
element = (0, 2) [2, 5, 8] 
element = (1, 0) [9, 12, 15] 
element = (1, 1) [10, 13, 16] 
element = (1, 2) [11, 14, 17] 
element = (2, 0) [18, 21, 24] 
element = (2, 1) [19, 22, 25] 
element = (2, 2) [20, 23, 26] 

# for sum, axis is the first keyword, so we may omit it, 

>>> x.sum(0), x.sum(1), x.sum(2) 
(array([[27, 30, 33], 
     [36, 39, 42], 
     [45, 48, 51]]), 
array([[ 9, 12, 15], 
     [36, 39, 42], 
     [63, 66, 69]]), 
array([[ 3, 12, 21], 
     [30, 39, 48], 
     [57, 66, 75]])) 
2

można uchwycić osi w ten sposób :

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

    [[2, 4, 5], 
    [1, 3, 6]], 

    [[1, 2, 4], 
    [2, 3, 4]], 

    [[1, 2, 4], 
    [1, 2, 6]]]) 
>>> a.shape 
(4,2,3) 

Utworzono tablicę o kształcie o różnych wartościach (4,2,3), dzięki czemu można wyraźnie powiedzieć strukturę. Inna oś oznacza inną "warstwę".

To znaczy, że axis = 0 indeksuje pierwszy wymiar kształtu (4,2,3). Odnosi się do tablic w pierwszym []. Istnieją 4 elementy, więc jego kształtu 4:

array[[1, 2, 3], 
     [2, 2, 3]], 

    array[[2, 4, 5], 
     [1, 3, 6]], 

    array[[1, 2, 4], 
     [2, 3, 4]], 

    array[[1, 2, 4], 
     [1, 2, 6]] 

axis = 1 wskaźnik drugi wymiar w kształcie (4,3,2). W każdej z warstw warstwy znajdują się 2 elementy: axis = 0, e.c. W tablicy

array[[1, 2, 3], 
     [2, 2, 3]] 

. dwa elementy:

array[1, 2, 3] 

array[2, 2, 3] 

i trzecia wartość kształt oznacza, że ​​nie są 3 elementy każdego elementu macierzy warstwy: axis = 2. e.c. Istnieją 3 elementy w array[1, 2, 3]. To jest wyraźne.

Można również określić oś/wymiary z numeru [] na początku lub na końcu.W tym przypadku liczba to 3 ([[[), więc możesz wybrać axis z axis = 0, axis = 1 i axis = 2.