Подтвердить что ты не робот

Как индексируется ось в массиве numpy?

Из Учебник Numpy ось может быть проиндексирована целыми числами, например 0 для столбца, 1 для строки, но я не понимаю, почему они индексируются таким образом? И как определить показатель каждой оси при работе с многомерным массивом?

4b9b3361

Ответ 1

По определению, номер оси измерения является индексом этой размерности в массиве shape. Это также позиция, используемая для доступа к этому измерению во время индексации.

Например, если 2D-массив a имеет форму (5,6), вы можете получить доступ к a[0,0] до a[4,5]. Таким образом, ось 0 является первым измерением ( "строки" ), а ось 1 является вторым измерением ( "столбцы" ). В более высоких измерениях, где "строка" и "столбец" перестают иметь смысл, постарайтесь думать о осях с точки зрения фигур и индексов.

Если вы делаете .sum(axis=n), например, измерение n свернуто и удалено, причем все значения в новой матрице равны сумме соответствующих свернутых значений. Например, если b имеет форму (5,6,7,8), и вы делаете c = b.sum(axis=2), тогда ось 2 (размер с размером 7) рушится, а результат имеет форму (5,6,8). Кроме того, c[x,y,z] равно сумме всех элементов c[x,y,:,z].

Ответ 2

В общем случае ось = 0 означает, что все ячейки с первым измерением изменяются с каждым значением 2-го измерения и 3-го измерения и т.д.

Например, двумерный массив имеет две соответствующие оси: первая выполняется вертикально вниз по строкам (ось 0), а вторая выполняется горизонтально по столбцам (ось 1)

Для 3D он становится сложным, поэтому используйте несколько циклов для циклов

>>> 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]]))

Ответ 3

Вы можете захватить ось таким образом:

>>> 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)

Я создал массив формы с разными значениями (4,2,3), чтобы вы могли четко рассказать о структуре. Различная ось означает другой "слой".

То есть axis = 0 индексирует первое измерение формы (4,2,3). Он относится к массивам в первом []. В нем есть 4 элемента, поэтому его форма равна 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 укажите второе измерение в форме (4,3,2). В каждом массиве слоя есть 2 элемента: axis = 0, e.c. В массиве

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

. Эти два элемента:

array[1, 2, 3]

array[2, 2, 3]

И третье значение формы означает, что в каждом элементе массива слоя есть 3 элемента: axis = 2. исполнительный комитет В array[1, 2, 3] есть 3 элемента. Это явно.

А также вы можете определить ось/размеры от числа [] в начале или в конце. В этом случае число равно 3 ([[[), поэтому вы можете выбрать axis из axis = 0, axis = 1 и axis = 2.