# NumPy cumsum: Расчет кумулятивных сумм массивов NumPy

Функция cumsum в NumPy используется для вычисления кумулятивной суммы элементов в массиве NumPy по указанной оси. В этом руководстве **вы узнаете, как использовать функцию cumsum в NumPy для вычисления кумулятивных сумм массивов**. Функция позволяет вам указать ось, по которой будут вычисляться суммы, а также тип данных результирующего массива.

К концу этого урока вы узнаете:

* Как понять функцию NumPy `cumsum()`
* Как вычислить совокупные суммы одномерных и двумерных массивов NumPy
* Как указать ось, по которой рассчитывать накопленные суммы
* Как указать тип данных накопительных сумм в NumPy

Оглавление

* [Понимание функции cumsum NumPy](#ponimanie-funkcii-cumsum-numpy)
* [Вычисление совокупных сумм одномерных массивов NumPy](#vychislenie-sovokupnykh-summ-odnomernykh-massivov-numpy)
* [Использование NumPy cumsum для расчета совокупных сумм списков Python](#ispolzovanie-numpy-cumsum-dlya-rascheta-sovokupnykh-summ-spiskov-python)
* [Вычисление совокупных сумм двумерных массивов NumPy](#vychislenie-sovokupnykh-summ-dvumernykh-massivov-numpy)
* [Изменение оси в NumPy cumsum](#izmenenie-osi-v-numpy-cumsum)
* [Изменение типа данных при вычислении накопительных сумм NumPy](#izmenenie-tipa-dannykh-pri-vychislenii-nakopitelnykh-summ-numpy)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Понимание функции cumsum NumPy

Перед тем как погрузиться в то, как использовать функцию `cumsum()` в NumPy, давайте рассмотрим, из чего состоит эта функция. Мы быстро ознакомимся с различными параметрами функции и их аргументами по умолчанию (если таковые имеются). Это даст вам хорошее представление о том, что ожидать в плане возможностей настройки кумулятивных сумм, которые вы можете рассчитать с помощью NumPy.

```python
# Понимание функции np.cumsum() из библиотеки NumPy
np.cumsum(a, axis=None, dtype=None, out=None)
```

Функция `np.cumsum()` вычисляет накопленную сумму элементов вдоль указанной оси массива.\
Возвращает массив той же формы, что и входной, содержащий накопленные суммы элементов вдоль указанной оси.

В таблице ниже представлены параметры и аргументы по умолчанию функции NumPy `cumsum()`:

| Параметр | Описание                                                                               | Аргумент по умолчанию | Принятые значения |
| -------- | -------------------------------------------------------------------------------------- | --------------------- | ----------------- |
| `a=`     | Входной массив                                                                         | N/A                   | array like        |
| `axis=`  | Ось, по которой рассчитывается совокупная сумма. По умолчанию NumPy сглаживает массив. | `None`                | int               |
| `dtype=` | Тип возвращаемого массива.                                                             | `None`                | dtype             |
| `out=`   | Альтернативный выходной массив, в который можно поместить результат.                   | `None`                | ndarray           |

Теперь, когда у вас есть глубокое понимание функции, давайте посмотрим, как вы можете вычислять кумулятивные суммы одномерных массивов NumPy.

### Вычисление совокупных сумм одномерных массивов NumPy

Чтобы рассчитать накопленную сумму одномерного массива, вы можете просто передать массив в функцию `np.cumsum()`. Это вернет массив той же длины, содержащий значения накопленных сумм. Давайте посмотрим, как это выглядит:

```python
# Вычисление накопленных сумм одномерных массивов NumPy
import numpy as np

arr = np.arange(5)

cumsum = np.cumsum(arr)
print(cumsum)

# Returns: [ 0  1  3  6 10]
```

Этот код вычисляет накопленные суммы элементов одномерного массива `arr` с помощью функции `np.cumsum()`.

Давайте разберем, что мы сделали в приведенном выше коде:

1. Мы использовали функцию `np.arange()` для возвращения массива, содержащего значения от 0 до 4
2. Мы передали этот массив в функцию `np.cumsum()` для вычисления кумулятивных сумм.

В следующем разделе вы узнаете, как вычислять кумулятивные суммы для списков в Python.

### Использование NumPy cumsum для расчета совокупных сумм списков Python

Функция cumsum в NumPy ожидает для своей работы объект, похожий на массив. Это означает, что мы также можем вычислять кумулятивные суммы значений списка Python. Давайте посмотрим, как это выглядит:

```python
# Вычисление накопленных сумм для списков Python
import numpy as np

values = [0, 1, 2, 3, 4]

cumsum = np.cumsum(values)
print(cumsum)

# Returns: [ 0  1  3  6 10]
```

Этот код вычисляет накопленные суммы элементов списка `values` с помощью функции `np.cumsum()`. На выходе получается массив NumPy с накопленными суммами.

В приведенном выше коде мы генерируем список значений от 0 до 4. Затем мы передаем этот список в функцию `np.cumsum()`. Это возвращает массив NumPy кумулятивных значений. Чтобы вернуть список значений, вы можете просто передать этот массив в конструктор

### Вычисление совокупных сумм двумерных массивов NumPy

Функция `np.cumsum()` также позволяет передавать двумерные массивы. Давайте посмотрим, что происходит, когда мы передаем в неё двумерный массив NumPy:

```python
# Вычисление накопленных сумм для двумерных массивов
import numpy as np

arr = np.array([
    [0, 1, 2],
    [3, 4, 5]
])

cumsum = np.cumsum(arr)
print(cumsum)

# Returns: [ 0  1  3  6 10 15]
```

Этот код вычисляет накопленные суммы элементов двумерного массива `arr` с помощью функции `np.cumsum()`. Функция рассматривает двумерный массив как одномерный массив, выпрямляя его перед вычислением накопленной суммы.

Этот результат может вас удивить: **по умолчанию** **функция cumsum в NumPy будет преобразовывать двумерный массив в одномерный, если не указана ось**. Из-за этого функция сначала преобразует двумерный массив в одномерный, а затем возвращает кумулятивную сумму. Давайте посмотрим, как это выглядит, когда мы указываем ось.

### Изменение оси в NumPy cumsum

NumPy предоставляет как первую, так и вторую оси. Первая ось представляет собой "столбцы" массива, в то время как вторая ось представляет "строки" массива.

Вычисляя кумулятивные суммы по 0-й оси, вы получаете массив того же размера и формы. В этом массиве суммы вычисляются "вниз" по столбцам, как показано ниже

```python
# Вычисление накопленных сумм по оси 0 для двумерных массивов
import numpy as np

arr = np.array([
    [0, 1, 2],
    [3, 4, 5]
])

cumsum = np.cumsum(arr, axis=0)
print(cumsum)

# Returns:
# [[0 1 2]
#  [3 5 7]]
```

Этот код вычисляет накопленные суммы элементов двумерного массива `arr` по оси 0 с помощью функции `np.cumsum()`. Каждый элемент результата является суммой элементов вдоль оси 0, начиная с первого элемента и заканчивая текущим элементом.

Аналогичным образом мы можем рассчитать кумулятивные суммы по 1-му измерению. **Это дает кумулятивные суммы по "строкам" массива**. Давайте посмотрим, как это выглядит:

```python
# Вычисление накопленных сумм по оси 1 для двумерных массивов
import numpy as np

arr = np.array([
    [0, 1, 2],
    [3, 4, 5]
])

cumsum = np.cumsum(arr, axis=1)
print(cumsum)

# Returns:
# [[ 0  1  3]
#  [ 3  7 12]]
```

Этот код вычисляет накопленные суммы элементов двумерного массива `arr` по оси 1 с помощью функции `np.cumsum()`. Каждый элемент результата является суммой элементов вдоль оси 1, начиная с первого элемента и заканчивая текущим элементом.

Мы видим, что это работает очень похожим образом. Функция возвращает массив той же формы и размера, в данном случае 2 на 3. Значения вычисляются по строкам.

В следующем разделе вы узнаете, как изменить тип данных результирующего массива.

### Изменение типа данных при вычислении накопительных сумм NumPy

По умолчанию NumPy вернет массив, соответствующий наименьшему общему типу данных, найденному в массиве. Мы можем изменить тип данных массива, передав тип данных в параметр `dtype=`. В массиве, который мы использовали, все значения являются целыми числами. Давайте укажем, что мы хотим, чтобы результирующий тип данных был вещественными числами:

```python
# Изменение типа данных при вычислении накопленных сумм
import numpy as np

arr = np.arange(5)

cumsum = np.cumsum(arr, dtype='float')
print(cumsum)

# Returns: [ 0.  1.  3.  6. 10.]
```

Этот код вычисляет накопленные суммы элементов одномерного массива `arr`, используя тип данных `float`, с помощью функции `np.cumsum()`.

Мы видим, что результаты кумулятивных сумм такие же, как и ранее, однако каждое значение теперь представляет собой число с плавающей точкой, а не целое число.

### Заключение

В этом учебном пособии вы научились вычислять кумулятивные суммы с помощью функции `cumsum()` библиотеки NumPy. Сначала вы изучили, как работает функция, рассмотрев ее параметры и аргументы по умолчанию. Затем вы научились вычислять кумулятивные суммы одномерных массивов и списков Python. После этого вы научились вычислять кумулятивные суммы двумерных массивов, включая изменение осей. Наконец, вы научились изменять типы данных результирующих массивов.

### Дополнительные ресурсы

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

* 4 способа расчета совокупной суммы Pandas
* [Как нормализовать массивы NumPy](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/kak-normalizovat-massivy-numpy-minimalnoe-maksimalnoe-masshtabirovanie-z-ocenka-l2)
* [Экспонента NumPy: использование функции NumPy.exp()](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/ispolzovanie-funkcii-numpy.exp-dlya-vychisleniya-eksponenty)
* [Гистограмма NumPy: понимание функции np.histogram](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/numpy/izuchaem-funkciyu-np.histogram-v-numpy-sozdaem-gistogrammu)
* [NumPy cumsum: официальная документация](https://numpy.org/doc/stable/reference/generated/numpy.cumsum.html)
