numpy.sum

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>)

Функция sum() выполняет суммирование элементов массива, которое так же может выполняться по указанной оси (осям).

Параметры:
a - подобный массиву объект или массив NumPy
Указанный объект или массив может состоять из любого доступного в NumPy числового типа.
axis - None, целое число или кортеж целых чисел (необязательный аргумент)
Данный параметр указывает номер оси или номера осей массива по которым выполняется суммирование его элементов. По умолчанию axis = None, что соответствует суммированию всех элементов массива. Если указано отрицательное число, то номер оси отсчитывается от последней оси по направлению к первой. Если указан кортеж целых чисел, то суммирование выполняется по всем указанным осям.
dtype - тип данных NumPy (необязательный аргумент)
Данный параметр указывает тип данных возвращаемого массива а так же тип накапливающего сумматора, в котором происходит сложение элементов. По умолчанию dtype = None, что соответствует типу данных входного массива.
out - массив Numpy (необязательный аргумент)
Указывает массив в который будет помещен результат работы функции. Данный массив должен иметь форму идентичную массиву с результатом работы функции. Подробнее о данном параметре смотрите на странице универсальные функции в разделе out.
keepdims - True или False (необязательный аргумент)
Если данный параметр указан как True, то результат работы функции по указанным осям будет способен к транслированию по исходному массиву, т.е. результат функции оформляется в массив с количеством осей исходного массива. Если параметр установлен в значение False, то результатом работы функции будет либо число, либо одномерный массив чисел.
initial - число (необязательный аргумент)
Определяет начальное значение в суммировании элементов массива. Данный параметр является доступным в NumPy начиная с версии 1.15.0.
Возвращает:
результат - число или массив NumPy
Массив имеющий форму входного массива a у которого удалена ось указанная в параметре axis. Если параметр axis не указан, то будет возвращен массив с числом равным сумме всех элементов массива. Если параметр keepdims установлен в значение False, то результатом будет либо число, либо одномерный массив чисел. Если параметр keepdims установлен в значение True, то результатом будет массив с формой транслируемой (совместимой) по исходному массиву.
Смотрите так же: nansum, cumsum, prod

Замечание

При вычислении cуммы целых чисел используется модульная арифметика, поэтому при переполнении буфера ошибки не возникает. На некоторых машинах (32-бит) могут появляться неожиданные (ошибочные) результаты:

>>> x = np.full((6, 3), 1000000000000000000)
>>> x
array([[1000000000000000000, 1000000000000000000, 1000000000000000000],
       [1000000000000000000, 1000000000000000000, 1000000000000000000],
       [1000000000000000000, 1000000000000000000, 1000000000000000000],
       [1000000000000000000, 1000000000000000000, 1000000000000000000],
       [1000000000000000000, 1000000000000000000, 1000000000000000000],
       [1000000000000000000, 1000000000000000000, 1000000000000000000]],
      dtype=int64)
>>>
>>> np.sum(x)
-446744073709551616
>>> 
>>> #  Хотя должно получиться:
... 1000000000000000000*18
18000000000000000000

Если же вам все-таки необходимо выполнять сложение для больших чисел, то можно указать тип массива object:

>>> x = np.full((6, 3), 1000000000000000000, dtype = np.object)
>>> np.sum(x)
18000000000000000000
>>> 
>>> 1000000000000000000*18 == np.sum(x)
True

Результат функции для пустого массива является 0 - нейтральный по сложению элемент:

>>> np.sum([])
0.0


Примеры

>> import numpy as np
>>> 
>>> #  Тип результата зависит от типа входного массива:
... np.sum([1.1, 2.2, 3.3])
6.6
>>> np.sum([1 + 1j, 2 + 2j, 3 + 3j])
(6+6j)
>>> 
>>> 
>>> x = np.arange(1, 10).reshape(3, 3)
>>> x
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.sum(x, axis = 0)    #  сумма элементов в столбцах
array([12, 15, 18])
>>> np.sum(x, axis = 1)    #  сумма элементов в строках
array([ 6, 15, 24])
>>>
>>> #  Если входной массив является многомерным, то мы можем
... #  указать любую ось по которой выполнять суммирование:
... x = np.arange(1, 9).reshape(2, 2, 2)
>>> x
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])
>>>
>>> np.sum(x)   #  сумма всех элементов массива
36
>>> 
>>> np.sum(x, axis = 0)   #  сумма элементов вдоль первой оси
array([[ 6,  8],
       [10, 12]])
>>> np.sum(x, axis = 1)   #  сумма элементов вдоль второй оси
array([[ 4,  6],
       [12, 14]])
>>> np.sum(x, axis = 2)   #  сумма элементов вдоль третьей оси
array([[ 3,  7],
       [11, 15]])
>>> 
>>> 
>>> #  Параметр keepdims определяет сохранность
... #  количества осей исходного массива:
... x = np.arange(1, 10).reshape(3, 3)
>>> x
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> 
>>> np.sum(x)
45
>>> np.sum(x, keepdims = True)
array([[45]])
>>> np.sum(x, keepdims = False)
45
>>> 
>>> np.sum(x, axis = 0)
array([12, 15, 18])
>>> np.sum(x, axis = 0, keepdims = True)
array([[12, 15, 18]])
>>> np.sum(x, axis = 0, keepdims = False)
array([12, 15, 18])
>>> 
>>> np.sum(x, axis = 1)
array([ 6, 15, 24])
>>> np.sum(x, axis = 1, keepdims = True)
array([[ 6],
       [15],
       [24]])
>>> np.sum(x, axis = 1, keepdims = False)
array([ 6, 15, 24])
>>> 
>>> 
>>> #  Параметр initial определяет число, которое будет
... #  дополнительно прибавлено к результату суммирования элементов:
... np.sum([1, 2, 3, 4])
10
>>> np.sum([1, 2, 3, 4], initial = 1000)
1010
>>> np.sum([1, 2, 3, 4], initial = 2000)
2010
>>> 
>>> 
>>> x = np.arange(1, 5).reshape(2, 2)
>>> x
array([[1, 2],
       [3, 4]])
>>> 
>>> np.sum(x, axis = 0)
array([4, 6])
>>> np.sum(x, axis = 0, initial = 100)
array([104, 106])
>>> 
>>> np.sum(x, axis = 1)
array([3, 7])
>>> np.sum(x, axis = 1, initial = 100)
array([103, 107])