Ответ 1
Очевидно, что
e.shape == (3, 2, 2)
Сумма по оси - операция сокращения, поэтому указанная ось исчезает. Следовательно,
e.sum(axis=0).shape == (2, 2)
e.sum(axis=1).shape == (3, 2)
e.sum(axis=2).shape == (3, 2)
Может кто-нибудь объяснить, что делает параметр axis
в NumPy?
Я ужасно смущен.
Я пытаюсь использовать функцию myArray.sum(axis=num)
Сначала я думал, что если массив сам по себе является 3 измерениями, axis=0
вернет три элемента, состоящие из суммы всех вложенных элементов в этой же позиции. Если каждое измерение содержало пять измерений, я ожидал, что axis=1
вернет результат из пяти элементов и так далее.
Однако это не так, и документация не помогает мне помочь (они используют массив 3x3x3, поэтому трудно сказать, что происходит )
Вот что я сделал:
>>> e
array([[[1, 0],
[0, 0]],
[[1, 1],
[1, 0]],
[[1, 0],
[0, 1]]])
>>> e.sum(axis = 0)
array([[3, 1],
[1, 1]])
>>> e.sum(axis=1)
array([[1, 0],
[2, 1],
[1, 1]])
>>> e.sum(axis=2)
array([[1, 0],
[2, 1],
[1, 1]])
>>>
Ясно, что результат не является интуитивным.
Очевидно, что
e.shape == (3, 2, 2)
Сумма по оси - операция сокращения, поэтому указанная ось исчезает. Следовательно,
e.sum(axis=0).shape == (2, 2)
e.sum(axis=1).shape == (3, 2)
e.sum(axis=2).shape == (3, 2)
Рассмотрим трехмерную координатную плоскость x, y, z:
Параметр оси - это число, которое связывается с массивами numpy, вдоль которых измеряется ваша агрегированная функция.
axis=0 means 'along the row', (x in the above image)
axis=1 means 'along the column', (y in the above image)
axis=2 means 'along the depth', (z in the above image)
Источник изображения: https://github.com/sentientmachine/Cheatsheets#python_numpy
Понимание параметра оси является необходимостью, если вы должны понимать квантование вектора, в частности, порядок мерных операций для трансляции.
Представьте, что мы хотим суммировать матрицу с тремя измерениями. Сумма могла бы действовать вдоль оси x, y или z или вдоль всех трех. По умолчанию ось равна 0, что означает самое внешнее измерение, самым внешним измерением является значение, возвращаемое your_3d_matrix[0]
Итак, если вы суммируете вдоль оси = 0, ось = 1 или ось = 2, вы получите одномерные кусочки суммы в этом измерении.
a = np.array([[1,2],[3,4]]) #define a simple 2d ndarray
>>> a[0,0]
1
>>> a[0,1]
2
>>> a[1,0]
3
>>> a[1,1]
4
>>> a.sum() #axis not specified means first along the col then
10 #along the row: (1+3) = 4 and
#2+4 = 6 then along the column 4+6 = 10
>>> a.sum(axis=0) #forcing axis=0 says collapse along the row so:
array([4, 6]) #1+3 = 4, 2+4 = 6
>>> a.sum(axis=1) #forcing axis=1 says collapse along the col so:
array([3, 7]) #1+2 = 3, 3+4 = 7
Вы можете даже иметь ось = 2, которая является вторым измерением вниз:
>>> b = np.array([[[1,2],[3,4]], [[5,6],[7,8]]])
>>> b
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
>>> b.sum() #sum along depth, col, then row:
36
>>> b.sum(axis=0) #sum across the topmost dimension 0, the two groups of 4
array([[ 6, 8],
[10, 12]])
>>> b.sum(axis=1) #sum across dimension 1 the lists of two, added.
array([[ 4, 6],
[12, 14]])
>>> b.sum(axis=2) #sum across the dimension 2, each individual list, row wise.
array([[ 3, 7],
[11, 15]])
Ориентация оси зависит от структуры, к которой она относится.
Порядок работы осевого коллапса начинается с внешнего значения, размер yourarray[0]
до самого внутреннего: yourarray[0][0][0]
.
Даже разработчики, которые кодировали это программное обеспечение с числовым значением, не могут создать интуицию для линейной алгебры, управляющей матричными операциями, видео Youtube пытаются объяснить глубину оси:
Alexandre Chabot LeClerc NumPy Учебник, который охватывает параметр оси: https://youtu.be/gtejJ3RCddE?t=1h55m17s
Канал Data School на youtube имеет отличное объяснение параметра оси: https://youtu.be/PtO3t6ynH-8?t=5m1s
Чтобы понять интуитивно axis
, обратитесь к рисунку ниже (источник: Отдел физики, Корнелл Юни)
Форма (булева) массива на рисунке выше shape=(8, 3)
. ndarray.shape вернет кортеж, где записи соответствуют длине конкретного измерения. В нашем примере 8
соответствует длине оси 0, тогда как 3
соответствует длине оси 1.