Метод cumsum
Метод cumsum класса ndarray вычисляет кумулятивную сумму элементов массива.
Кумулятивная сумма - это последовательность частичных сумм, где каждый элемент
равен сумме всех предыдущих элементов включая текущий.
Метод может применяться ко всему массиву или вдоль указанной оси.
Результатом является новый массив, содержащий накопленные суммы.
Синтаксис
arr.cumsum([axis, dtype, out])
Параметры метода:
-
axis(необязательный) - ось, вдоль которой вычисляется кумулятивная сумма. Если не указан, массив предварительно выравнивается. -
dtype(необязательный) - тип данных результирующего массива. -
out(необязательный) - альтернативный выходной массив для результата.
Пример
Давайте вычислим кумулятивную сумму для одномерного массива:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
res = arr.cumsum()
print(res)
Результат выполнения кода:
[ 1 3 6 10 15]
Каждый элемент результата - это сумма всех предыдущих элементов плюс текущий:
1, 1+2=3, 1+2+3=6, 1+2+3+4=10, 1+2+3+4+5=15.
Пример
Вычислим кумулятивную сумму вдоль разных осей для двумерного массива:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# Вдоль оси 0 (по столбцам)
res0 = arr.cumsum(axis=0)
print('axis=0:')
print(res0)
# Вдоль оси 1 (по строкам)
res1 = arr.cumsum(axis=1)
print('axis=1:')
print(res1)
Результат выполнения кода:
axis=0:
[[1 2 3]
[5 7 9]]
axis=1:
[[ 1 3 6]
[ 4 9 15]]
При axis=0 суммирование происходит по строкам (вертикально):
каждый столбец суммируется независимо. При axis=1 суммирование
происходит по столбцам (горизонтально) для каждой строки отдельно.
Пример
Используем параметр dtype для изменения типа данных результата:
import numpy as np
arr = np.array([1, 2, 3, 4, 5], dtype=np.float32)
res = arr.cumsum(dtype=np.float64)
print(res)
print(res.dtype)
Результат выполнения кода:
[ 1. 3. 6. 10. 15.]
float64
Исходный массив имеет тип float32, а результат приведён к float64.
Это полезно, когда нужно избежать переполнения или повысить точность вычислений.
Пример
Вычислим кумулятивную сумму для многомерного массива без указания оси:
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
res = arr.cumsum()
print(res)
Результат выполнения кода:
[ 1 3 6 10 15 21 28 36]
Без указания оси массив выравнивается в одномерный, и кумулятивная сумма вычисляется по всем элементам.