axis = 0 не ясно понимается в numpy.сумма

Я изучаю Python и столкнулся с numpy.sum. Он имеет необязательный параметр axis. Этот параметр используется для получения суммирования по столбцам или по строкам. Когда axis = 0 мы подразумеваем суммировать его только по столбцам. Например,

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

этот фрагмент кода производит выход: array([5, 7, 9]), штраф. Но если я это сделаю:--9-->

a = np.array([1, 2, 3])
np.sum(a, axis = 0)

Я получаю результат: 6 почему? Разве я не должен получить array([1, 2, 3])? Спасибо.

2 ответов


все, что происходит, это то, что numpy суммирует через первую (0-ю) и единственную ось. Рассмотрим следующее:

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

In [3]: a.shape
Out[3]: (3,)

In [4]: len(a.shape) # number of dimensions
Out[4]: 1

In [5]: a1 = a.reshape(3,1)

In [6]: a2 = a.reshape(1,3)

In [7]: a1
Out[7]: 
array([[1],
       [2],
       [3]])

In [8]: a2
Out[8]: array([[1, 2, 3]])

In [9]: a1.sum(axis=1)
Out[9]: array([1, 2, 3])

In [10]: a1.sum(axis=0)
Out[10]: array([6])

In [11]: a2.sum(axis=1)
Out[11]: array([6])

In [12]: a2.sum(axis=0)
Out[12]: array([1, 2, 3])

Итак, чтобы быть более явным:

In [15]: a1.shape
Out[15]: (3, 1)

a1 2-мерная, "длинной" оси первого.

In [16]: a1[:,0] # give me everything in the first axis, and the first part of the second
Out[16]: array([1, 2, 3])

теперь суммируем по первой оси:

In [17]: a1.sum(axis=0)
Out[17]: array([6])

Теперь рассмотрим менее тривиальный двумерный случай:

In [20]: b = np.array([[1,2,3],[4,5,6]])

In [21]: b
Out[21]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [22]: b.shape
Out[22]: (2, 3)

первая ось - "строки". Sum вдоль в строки:

In [23]: b.sum(axis=0)
Out[23]: array([5, 7, 9])

вторая ось-это "колонны". Sum вдоль столбцы:

In [24]: b.sum(axis=1)
Out[24]: array([ 6, 15])

Если кому-то нужно это визуальное описание:

numpy axis 0 and axis 1